diff --git a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AbstractTransactionAspect.aj b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AbstractTransactionAspect.aj index 29669b526d..49a197495e 100644 --- a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AbstractTransactionAspect.aj +++ b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AbstractTransactionAspect.aj @@ -19,6 +19,7 @@ package org.springframework.transaction.aspectj; import org.aspectj.lang.annotation.SuppressAjWarnings; import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.DisposableBean; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAttributeSource; @@ -44,7 +45,7 @@ import org.springframework.transaction.interceptor.TransactionAttributeSource; * @author Juergen Hoeller * @since 2.0 */ -public abstract aspect AbstractTransactionAspect extends TransactionAspectSupport { +public abstract aspect AbstractTransactionAspect extends TransactionAspectSupport implements DisposableBean { /** * Construct the aspect using the given transaction metadata retrieval strategy. @@ -56,6 +57,11 @@ public abstract aspect AbstractTransactionAspect extends TransactionAspectSuppor setTransactionAttributeSource(tas); } + @Override + public void destroy() { + clearTransactionManagerCache(); // An aspect is basically a singleton + } + @SuppressAjWarnings("adviceDidNotMatch") Object around(final Object txObject): transactionalMethodExecution(txObject) { MethodSignature methodSignature = (MethodSignature) thisJoinPoint.getSignature(); diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java index dcc512f878..00679e9387 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java @@ -338,6 +338,13 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init } } + /** + * Clear the cached transaction managers. + */ + protected void clearTransactionManagerCache() { + this.transactionManagerCache.clear(); + } + /** * Determine the specific transaction manager to use for the given transaction. */