事务成功或回滚后,我需要调用某些方法。我正在使用
<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"> <property name="sessionFactory"> <ref local="mysessionFactory"/> </property> </bean> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="mysessionFactory"/> </property> </bean> <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>
该应用程序使用一些外部Web服务,这些内部Web服务在回滚内部事务时需要“清除”。有没有办法在不使用声明式事务管理的情况下完成此操作。
在Hibernate中,您可以扩展EmptyInterceptor和覆盖 afterTransactionCompletion()方法并将其注册在 SessionFactoryBean或中HibernateTransactionManager。
EmptyInterceptor
afterTransactionCompletion()
SessionFactoryBean
HibernateTransactionManager
在Spring中,您可以使用扩展TransactionSynchronizationAdapter,覆盖afterCompletion()和注册 TransactionSynchronizationManager#registerSynchronization()。
TransactionSynchronizationAdapter
afterCompletion()
TransactionSynchronizationManager#registerSynchronization()
编辑
使用Spring Aop向所有带注释的方法添加同步的示例 @Transactional
@Transactional
@Aspect class TransactionAspect extends TransactionSynchronizationAdapter { @Before("@annotation(org.springframework.transaction.annotation.Transactional)") public void registerTransactionSyncrhonization() { TransactionSynchronizationManager.registerSynchronization(this); } @Override public void afterCompletion(int status) { // code } }