我在文档中找不到对此的明确答案,虽然似乎有一个合乎逻辑的答案,但人们无法确定.场景是这样的 - 你有一个基于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>)?
我希望不会在同一个类上创建两个拦截器(并且无论哪个首先都会启动事务)
感谢斯卡夫曼的努力。最后我想我得到了这种行为:
<aop:advisor>(@Transactional与 一起)围绕目标类(其方法将在事务中运行的类)<tx:annotation-driven>创建一个。TransactionInterceptororder会覆盖另一个属性。如果未指定 order 属性,则顺序未定义。但我的测试表明,最新定义的优先级更高applicationContext.xml,尽管情况可能并非总是如此:当在不同方面定义的两条通知都需要在同一连接点运行时,除非您另外指定,否则执行顺序是未定义的。
至少这是 spring 2.5.6 的行为。
| 归档时间: |
|
| 查看次数: |
2441 次 |
| 最近记录: |