调用私有方法时的Spring事务

goo*_*ead 6 spring transactions

我有两个问题。

如果我有一个方法:

@Transactional
public method1(){
    method2()
}

public method2(){
    dao.save()
}
Run Code Online (Sandbox Code Playgroud)

如果method2()出现异常,会不会有回滚?

另一个问题:
如果我有一个方法:

@Transactional
public method1(){
    method2()
}

private void method2(){
    dao.save()
}
Run Code Online (Sandbox Code Playgroud)

如果method2()出现异常,会不会有回滚?

isa*_*sah 5

是的,会有回滚。私有方法将在同一个事务中运行。您应该知道您不能拥有@Transactional私有方法。如果不引发任何错误,它将无法工作。这种行为在Spring Docs 中有解释:

由于 Spring 的 AOP 框架基于代理的特性,目标对象内的调用根据定义不会被拦截。对于 JDK 代理,只能拦截代理上的公共接口方法调用。