基于注释和基于xml的事务定义优先级

Boz*_*zho 6 java spring

我在文档中找不到对此的明确答案,虽然似乎有一个合乎逻辑的答案,但人们无法确定.场景是这样的 - 你有一个基于xml的事务定义,如:

<tx:advice id="txAdvice" transaction-manager="jpaTransactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>
Run Code Online (Sandbox Code Playgroud)

建议所有服务方法.但是你有@Transactional一个具体的类/方法,你想要覆盖propagation属性.

很明显,@Transactional在类级别覆盖同一级别,但它是否覆盖<tx:advice>(实际上<aop:pointcut>)?

我希望不会在同一个类上创建两个拦截器(并且无论哪个首先都会启动事务)

Boz*_*zho 4

感谢斯卡夫曼的努力。最后我想我得到了这种行为:

  1. <aop:advisor>@Transactional与 一起)围绕目标类(其方法将在事务中运行的类)<tx:annotation-driven>创建一个。TransactionInterceptor
  2. 具有较低属性的建议order会覆盖另一个属性。如果未指定 order 属性,则顺序未定义。但我的测试表明,最新定义的优先级更高applicationContext.xml,尽管情况可能并非总是如此:

当在不同方面定义的两条通知都需要在同一连接点运行时,除非您另外指定,否则执行顺序是未定义的。

至少这是 spring 2.5.6 的行为。