spring aop如何使用jdk代理处理@Transactional?

时间:2018-03-09 08:16:17

标签: java spring

如果一个Service类具有@Transactional的方法,那么spring将使用proxy来处理它。 但是如果一个Transactional方法调用另一个

@Transactional
public FeedBackModel getOne() {
    ///..
    return getTwo();
}
@Transactional
public FeedBackModel getTwo() {
    return null;
}
像这样。

如果是jdk代理,那么第二个@Transactional将无效。 但Spring PROPAGATION会正确处理这个问题。 它是如何工作的?

1 个答案:

答案 0 :(得分:0)

如果您尝试在从 getTwo() 调用的 getOne() 中提交事务,这将不起作用,即使两者都是 @Transactional 也是如此。请参阅documentation

<块引用>

...请采纳 Spring 团队的建议,只注释具体的 带有@Transactional 的类(以及具体类的方法) 注释。

注意:由于此机制是基于代理的,因此只有“外部”方法 通过代理进入的呼叫将被拦截。这意味着 'self-invocation',即目标对象中的一个方法调用一些 目标对象的其他方法,不会导致实际交易 在运行时即使调用的方法被标记为@Transactional!