问题:当切面切的方法是实现类里的时候,方法调用时不进入切面(自调用不进入切面)
原理:
Spring Aop有2种代理方式, 一是基于 JDK Dynamic Proxy 技术而实现的;二是基于 CGLIB 技术而实现的
如果一个类实现了某个接口 会默认使用JDK Dynamic Proxy
比如有2个方法methodA,methodB, 所切方法为 methodB(){}
当内部类直接调用所切方法时就不会进入切面:
methodA(){
methodB();
}
只有用自动注入的 iTaskService.methodB() 才会进入切面
解决方法: xml 配置修改为
<aop:aspectj-autoproxy expose-proxy="true"/>
方法调用:
methodA(){
((ITaskService)AopContext.currentProxy()).methodB();
}