如果一个@Transactional注释方法在同一对象实例上调用另一个@Transactional注释方法会发生什么?

时间:2015-03-24 10:36:29

标签: java spring spring-transactions

我正在研究Spring如何处理事务,我想问如果一个@Transactional带注释的方法在同一个对象实例上调用另一个@Transactional带注释的方法会发生什么?

我知道事务传播默认级别为REQUIRED,因此,如果method1()注释@Transactional MyObject实例,则调用method2()我认为,在@Transactional级别之后,REQUIRED创建的同一事务执行相同实例的method1()注释)。

我的推理是正确还是我错过了什么?如果在同一个实例上调用2个@Transactional方法,我不确定究竟会发生什么。

它如何运作?

1 个答案:

答案 0 :(得分:9)

如果您在同一个班级中从method2()拨打method1(),则第二种方法的@Transactional注释将不会产生任何影响,因为它不是通过代理调用,而是直接调用。只有通过代理(自动装配的bean或以任何其他方式注入的某个实例)调用时,才会使用事务行为增强方法。

但一般来说,如果method1()method2()位于不同的类中,并且两者都使用@Transactional注释(因此使用REQUIRED传播),那么他们会分享同一交易始于method1()