0
点赞
收藏
分享

微信扫一扫

Spring service本类中方法调用另一个方法事务不生效问题

ZSACH 2022-02-08 阅读 70

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

举报

相关推荐

0 条评论