同类调用AOP失效问题
使用aop代理对象,我们的到的原始对象实际上是一个他的代理对象
如:
结果:
这里可以得知,AOP是通过代理对象调用切入点(被通知的连接点),实现切面关系,AOP通知才会生效。
今天就疏忽了,连接点调用切入点,切入点通知不能生效,看代码:
service层代码:
通知类代码:
由此可知,我们是对transfer()方法进行了织入,而inMoney方法只是调用这个切入点,这是同类调用。
那么,同类调用,这个切入点是被代理类调用的,还是被原始对象调用的呢?
看代码:
结果:
由此可见,同类调用this是原始对象,没有被代理对象调用,那肯定织入不生效。
解决办法:
- 采用AopContext.currentProxy().方法B名()来进行调用 注:需要设置expose-proxy=true,例如:
- ApplicationContext.getBean()
- 在当前类中注入自己
参考:
https://blog.csdn.net/dark159735/article/details/120632495
https://blog.csdn.net/aosica321/article/details/58039299
https://blog.csdn.net/zuzhiang/article/details/120260181