Sping AOP切面失效问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gongxiao1993/article/details/81317127

jdk动态代理demo如下所示:(命名随意了,望见谅)

当代理类调用test方法的时候,会进入到InvocationHandler的invoke方法中,执行完增强逻辑后,接着执行

method.invoke(proxyDemo, args),proxyDemo就是我们被代理的类,之后的方法就是在proxyDemo实例中执行,所以test1方法是不会再进入到InvocationHandler的invoke方法中的。

springAOP中的切面失效也是同样的道理。

进入到invokeJoinpointUsingReflection方法可以看到,是通过反射执行target中的相应方法。

进入到proceed方法中,我们可以看到,就是递归的执行拦截器链上的方法,执行到最后的时候执行invokeJoinpoint方法。

invokeJoinpoint方法其实就是通过反射调用target中的相应方法。

所以根据上述的分析,我们知道,如果一开始调用的方法没有进行切面增强的话,其内部再调用有切面增强的方法,这时切面是不会生效的,因为此时调用有切面增强方法的类不是代理类,而是被代理类本身。

解决方法见https://blog.csdn.net/gongxiao1993/article/details/81208659

猜你喜欢

转载自blog.csdn.net/gongxiao1993/article/details/81317127
今日推荐