调用private方法时的Spring事务

时间:2017-08-11 08:16:44

标签: spring transactions

我学习Spring事务管理。 我有两个问题。 如果我有方法:

@Transactional
public method1(){
method2()
}

public method2(){
dao.save()
}

如果方法2中存在异常,是否会有回滚?

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

@Transactional
public method1(){
method2()
}

private void method2(){
dao.save()
}

如果方法2中存在异常,是否会有回滚?感谢。

2 个答案:

答案 0 :(得分:1)

两者都是。事务方法意味着在方法的整个运行时期间必须没有错误。

如果您从其中调用的某个方法出现错误,则会传播这些错误并使事务失败并回滚。

答案 1 :(得分:0)

是的,会有回滚。 私有方法将在同一事务中运行。您应该知道,您无法使用@Transactional私有方法。如果不提出任何错误,它将无法工作。 Spring Docs

中解释了此行为
  

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