Spring事务传播机制生效条件
文章目录
为何不生效?
因为 spring 是使用 aop 来代理事务控制 ,是针对于接口或类的,所以在同一个 service 类中两个方法的调用,传播机制是不生效的。
上面这段话说了原因,好像又没说。可以说的具体一点吗?
OK,具体一点讲:
我们使用spring容器构建出来的对象是一个代理对象,使用AOP对其方法增强也是返回的一个代理方法,目标对象内部的自我调用无法实施切面中的增强
// todo 画图
如何解决?
解决方法有很多种,我们说一个最简单的。
将代码
class AService {
    
    @Transactional
    methodA() {
        // do something A
        this.methodB();
    }
    @Transactional
    methodB() {
        // do something B
    }   
}
改为
class AService {
  	@Autowired
    private AService proxySelf; //表示代理对象,不是目标对象  
    @Transactional
    methodA() {
        // do something A
        proxySelf.methodB();
    }
    @Transactional
    methodB() {
        // do something B
    }  
    
}
在目标对象中注入一个代理对象,然后使用调用代理对象的方法B,则此时的方法B也是增强后的方法。
实践一下
// todo









