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