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 00679e9387..48c8f7c47d 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 @@ -352,23 +352,12 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init if (this.beanFactory != null) { String qualifier = txAttr != null ? txAttr.getQualifier() : null; if (StringUtils.hasText(qualifier)) { - PlatformTransactionManager txManager = this.transactionManagerCache.get(qualifier); - if (txManager == null) { - txManager = BeanFactoryAnnotationUtils.qualifiedBeanOfType( - this.beanFactory, PlatformTransactionManager.class, qualifier); - this.transactionManagerCache.putIfAbsent(qualifier, txManager); - } - return txManager; + return determineQualifiedTransactionManager(qualifier); } else if (StringUtils.hasText(this.transactionManagerBeanName)) { - PlatformTransactionManager txManager = this.transactionManagerCache.get(this.transactionManagerBeanName); - if (txManager == null) { - txManager = this.beanFactory.getBean( - this.transactionManagerBeanName, PlatformTransactionManager.class); - this.transactionManagerCache.putIfAbsent(this.transactionManagerBeanName, txManager); - } - return txManager; - } else { + return determineQualifiedTransactionManager(this.transactionManagerBeanName); + } + else if (txAttr != null) { // Do not lookup default bean name if no tx attributes are set PlatformTransactionManager defaultTransactionManager = getTransactionManager(); if (defaultTransactionManager == null) { defaultTransactionManager = this.beanFactory.getBean(PlatformTransactionManager.class); @@ -381,6 +370,16 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init return getTransactionManager(); } + private PlatformTransactionManager determineQualifiedTransactionManager(String qualifier) { + PlatformTransactionManager txManager = this.transactionManagerCache.get(qualifier); + if (txManager == null) { + txManager = BeanFactoryAnnotationUtils.qualifiedBeanOfType( + this.beanFactory, PlatformTransactionManager.class, qualifier); + this.transactionManagerCache.putIfAbsent(qualifier, txManager); + } + return txManager; + } + /** * Convenience method to return a String representation of this Method * for use in logging. Can be overridden in subclasses to provide a diff --git a/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java b/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java index 1613357d5d..8fb1a6948f 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java +++ b/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java @@ -139,6 +139,14 @@ public class TransactionInterceptorTests extends AbstractTransactionAspectTests assertSame(transactionManager, ti.determineTransactionManager(null)); } + @Test + public void determineTransactionManagerWithNoTransactionAttribute() { + BeanFactory beanFactory = mock(BeanFactory.class); + TransactionInterceptor ti = createTestTransactionInterceptor(beanFactory, null); + + assertNull(ti.determineTransactionManager(null)); + } + @Test public void determineTransactionManagerWithQualifierUnknown() { BeanFactory beanFactory = mock(BeanFactory.class);