同类调用AOP失效问题

使用aop代理对象,我们的到的原始对象实际上是一个他的代理对象

如:

结果:

这里可以得知,AOP是通过代理对象调用切入点(被通知的连接点),实现切面关系,AOP通知才会生效。

今天就疏忽了,连接点调用切入点,切入点通知不能生效,看代码:

service层代码:

 通知类代码:

由此可知,我们是对transfer()方法进行了织入,而inMoney方法只是调用这个切入点,这是同类调用。

那么,同类调用,这个切入点是被代理类调用的,还是被原始对象调用的呢?

看代码:

结果:

由此可见,同类调用this是原始对象,没有被代理对象调用,那肯定织入不生效。

解决办法:

    • 采用AopContext.currentProxy().方法B名()来进行调用
    • 注:需要设置expose-proxy=true,例如:
<aop:aspectj-autoproxy proxy-target-class="true"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

 

posted @ 2022-08-29 16:33  Boblim  阅读(269)  评论(0)    收藏  举报