【发布时间】:2010-06-23 07:30:34
【问题描述】:
Spring 中是否有任何基于配置的替代方法来替代 @Transactional 注释?
我想让我的 java 类尽可能不受 Spring 影响,即尽可能与任何框架分离。
【问题讨论】:
标签: spring transactions
Spring 中是否有任何基于配置的替代方法来替代 @Transactional 注释?
我想让我的 java 类尽可能不受 Spring 影响,即尽可能与任何框架分离。
【问题讨论】:
标签: spring transactions
是的,使用aop:config 和tx:advice。例如:
<aop:config>
<aop:pointcut id="serviceMethods"
expression="execution(* com.package.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
【讨论】:
注解是标记方法应在事务中执行的最佳选择。这对于 Spring 和 EJB 3 都是推荐的。
XML 方法需要更多配置,对重构不友好,您必须在配置中查看某个方法是否会在事务中执行。
由于基于注解的事务支持是大多数开发人员的首选,并且您不喜欢使用 Spring 的 @Transactional 注解,我建议您使用自定义注解。
那么你有两个选择:
@Transactional 并在您的 Spring 配置中使用 <tx:annotation-driven /> 元素。这很简单,只需更新一个注解即可移除 Spring 依赖项。PlatformTransactionManager 实现。我已经写过如何创建一个拦截器,它在标有注释here 的方法之前和之后添加逻辑。并演示了您必须在 PlatformTransactionManager here 上使用哪些方法。
我希望这会有所帮助!
【讨论】: