Skip to content

Commit 67dde58

Browse files
authored
Eliminate need to override transactionInterceptor bean. (#1679)
Closes #1665.
1 parent 1c78f22 commit 67dde58

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@
2626
import java.util.Map;
2727
import java.util.Set;
2828

29+
import org.springframework.beans.BeansException;
30+
import org.springframework.beans.factory.ObjectProvider;
2931
import org.springframework.beans.factory.config.BeanDefinition;
32+
import org.springframework.beans.factory.config.BeanPostProcessor;
33+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
3034
import org.springframework.context.annotation.Bean;
3135
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
3236
import org.springframework.context.annotation.Configuration;
@@ -63,6 +67,8 @@
6367
import org.springframework.data.mapping.model.PropertyNameFieldNamingStrategy;
6468
import org.springframework.transaction.TransactionManager;
6569
import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource;
70+
import org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration;
71+
import org.springframework.transaction.config.TransactionManagementConfigUtils;
6672
import org.springframework.transaction.interceptor.TransactionAttributeSource;
6773
import org.springframework.transaction.interceptor.TransactionInterceptor;
6874
import org.springframework.transaction.support.TransactionTemplate;
@@ -374,19 +380,32 @@ public CouchbaseTransactionalOperator couchbaseTransactionalOperator(
374380
return CouchbaseTransactionalOperator.create(couchbaseCallbackTransactionManager);
375381
}
376382

377-
@Bean
378-
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
379-
public TransactionInterceptor transactionInterceptor(TransactionManager couchbaseTransactionManager) {
380-
TransactionAttributeSource transactionAttributeSource = new AnnotationTransactionAttributeSource();
381-
TransactionInterceptor interceptor = new CouchbaseTransactionInterceptor(couchbaseTransactionManager,
382-
transactionAttributeSource);
383-
interceptor.setTransactionAttributeSource(transactionAttributeSource);
384-
if (couchbaseTransactionManager != null) {
385-
interceptor.setTransactionManager(couchbaseTransactionManager);
386-
}
387-
return interceptor;
388-
}
389-
383+
@Bean
384+
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
385+
static BeanPostProcessor transactionInterceptorCustomizer(
386+
ObjectProvider<TransactionManager> transactionManagerProvider, ConfigurableListableBeanFactory beanFactory) {
387+
388+
BeanPostProcessor processor = new BeanPostProcessor() {
389+
@Override
390+
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
391+
if (bean instanceof TransactionInterceptor) {
392+
TransactionAttributeSource transactionAttributeSource = new AnnotationTransactionAttributeSource();
393+
TransactionManager transactionManager = transactionManagerProvider.getObject();
394+
TransactionInterceptor interceptor = new CouchbaseTransactionInterceptor(transactionManager,
395+
transactionAttributeSource);
396+
interceptor.setTransactionAttributeSource(transactionAttributeSource);
397+
if (transactionManager != null) {
398+
interceptor.setTransactionManager(transactionManager);
399+
}
400+
return interceptor;
401+
}
402+
return bean;
403+
}
404+
405+
};
406+
beanFactory.addBeanPostProcessor(processor);
407+
return processor;
408+
}
390409
/**
391410
* Configure whether to automatically create indices for domain types by deriving the from the entity or not.
392411
*/

0 commit comments

Comments
 (0)