使用aop代理对象,我们的到的原始对象实际上是一个他的代理对象
如:
结果:
这里可以得知,AOP是通过代理对象调用切入点(被通知的连接点),实现切面关系,AOP通知才会生效。
今天就疏忽了,连接点调用切入点,切入点通知不能生效,看代码:
service层代码:
通知类代码:
由此可知,我们是对transfer()方法进行了织入,而inMoney方法只是调用这个切入点,这是同类调用。
那么,同类调用,这个切入点是被代理类调用的,还是被原始对象调用的呢?
看代码:
结果:
由此可见,同类调用this是原始对象,没有被代理对象调用,那肯定织入不生效。
解决:
通过spring上下文获取代理对象:
先实现ApplicationContextAware接口
然后提升成员变量:
最后直接用
这样就可以织入了。