我正在研究Spring如何处理事务,我想问如果一个@Transactional
带注释的方法在同一个对象实例上调用另一个@Transactional
带注释的方法会发生什么?
我知道事务传播默认级别为REQUIRED
,因此,如果method1()
注释@Transactional
MyObject
实例,则调用method2()
我认为,在@Transactional
级别之后,REQUIRED
创建的同一事务执行相同实例的method1()
注释)。
我的推理是正确还是我错过了什么?如果在同一个实例上调用2个@Transactional
方法,我不确定究竟会发生什么。
它如何运作?
答案 0 :(得分:9)
如果您在同一个班级中从method2()
拨打method1()
,则第二种方法的@Transactional
注释将不会产生任何影响,因为它不是通过代理调用,而是直接调用。只有通过代理(自动装配的bean或以任何其他方式注入的某个实例)调用时,才会使用事务行为增强方法。
但一般来说,如果method1()
和method2()
位于不同的类中,并且两者都使用@Transactional
注释(因此使用REQUIRED
传播),那么他们会分享同一交易始于method1()
。