举例:两个均加了事务注解的方法A和B,在A方法中调用B方法,会导致B的事务不起作用,因为加了事务注解的方法,并不是本身在执行,而是 代理类在执行,而在A方法中调用B方法的时候,默认的是this.B();,代表并没有使用代理类来执行,所以不会享受代理的服务。也就是不起作用的原因。
解决方法:
1. 获取当前service的代理类
IAccountAdjustmentService accountAdjustmentService = (IAccountAdjustmentService) AopContext.currentProxy();
2. 从Bean容器中获取
此方法需要单独写一个ApplicationContextAware的实现类。
applicationContext.getBean()