目标方法本体确认只执行了一次,项目内没有配置ProxyCreator,都是默认的,应该不至于生成jdk+cglib双重代理,打印了生成的代理类,都是jdk代理。
before和after两种切入方式都会重复执行代理方法。
仔细找了一遍,项目里面有个全局事务AOP,怀疑可能两个AOP使用在同一个方法上才会导致我的这个情况,但我把这段AOP配置删掉重启,还是会出现重复执行代理方法的问题。
除此之外,项目里面找不到其它地方使用了AOP,而Struts的拦截器是拦截Action的,我的AOP拦截Service层方法,应该不会干扰才对啊,不懂了。
执行到调用目标方法的时候按F5进去,跟踪Spring的源码,发现拦截链里面有三个:
[org.springframework.aop.interceptor.ExposeInvocationInterceptor@6e259ee9, org.springframework.aop.framework.InterceptorAndDynamicMethodMatcher@67e40b7d, org.springframework.aop.framework.InterceptorAndDynamicMethodMatcher@2cae70d4]
假设这里就是三个拦截行为的话,其中我写的代理方法执行了两次,一次是我本身想要的行为,另一次是把那个未知的拦截器也代理了,然后还有一次拦截行为自然就是那个拦截器的,就是不知道那个拦截器是什么。
3 个解决方案
#1
看看你spring的配置
#2
还有你呗代理的方法的 代码
#3
#1
看看你spring的配置
#2
还有你呗代理的方法的 代码