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

Java 如果一个@Transactional注释方法正在同一对象实例上调用另一个@Transactional注释方法,会发生什么情况?,java,spring,spring-transactions,Java,Spring,Spring Transactions,我正在研究如何Spring处理事务,我在问如果一个@Transactional注释的方法在同一个对象实例上调用另一个@Transactional注释的方法会发生什么 我知道事务传播defaul级别是必需的,因此,如果我有一个method1()用@transactional注释的MyObject实例,调用同一实例的method2()(用@transactional注释),我认为,在REQUIRED级别之后,对method1()创建的同一事务执行该操作 是我的推理正确还是我遗漏了什么?如果在同一个实

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

我知道事务传播defaul级别是
必需的
,因此,如果我有一个
method1()
@transactional
注释的
MyObject
实例,调用同一实例的
method2()
(用
@transactional
注释),我认为,在
REQUIRED
级别之后,对
method1()
创建的同一事务执行该操作

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

它是如何工作的?

如果在同一个类中从
method1()
调用
method2()
,第二个方法的
@Transactional
注释将不会有任何效果,因为它不是通过代理调用的,而是直接调用的。只有通过代理(AutowiredBean或以任何其他方式注入的某个实例)调用时,才使用事务行为增强方法


但是一般来说,如果
method1()
method2()
在不同的类中,并且都用
@Transactional
注释(因此使用
必需的
传播),那么它们将共享在
method1()

中启动的相同事务。您能提供一些代码吗,想解释一下吗?我也想知道为什么这个答案被否决了。第二段可能需要重新措辞,因为它取决于传播级别,但由于需要默认的传播,因此该段是正确的。Tnx,完美的解释:-)@AndreaNobili不客气。@pred-fragmaric如果method2()将传播设置为REQUIRES\u NEW怎么办?