关于Spring AOP无法嵌套拦截

public List<String> getAll()

{
getPrintLog(); 此方法的作用是想证明:Spring AOP 无法做到嵌套拦截
return issueDao.getAll();
}

原因很简单,被拦截的类的方法执行其实是通过由spring为该类生成的代理类调用指定方法实现的,如下:
//IssueServiceProxy serviceProxy;
//serviceProxy.getAll();
//而在getAll方法内部再调用getPrintLog(),其实是this.getPrintLog(),这个this是IssueService的对象,即被代理的对象,而不是代理对象(serviceProxy)
//其实任何的拦截,都是依赖“代理”这种机制实现的,在真正调用方法的前后执行拦截操作,既然不是通过代理对象调用的,自然就失去了拦截的能力,故没有嵌套拦截的能力
//解决方案:
//1.使用aspectj
//2.避免嵌套调用
//3.再嵌套调用时使用spring bean代替this

//推荐从设计上规避这种问题,即第二条。实在是没办法的时候,可以使用第三条,通过Spring提供的ProxyFactoryBean来获取被拦截类的代理类的对象,然后发起调用,此时就能被拦截到了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值