|
26 | 26 | import java.util.Map;
|
27 | 27 | import java.util.Set;
|
28 | 28 |
|
| 29 | +import org.springframework.beans.BeansException; |
| 30 | +import org.springframework.beans.factory.ObjectProvider; |
29 | 31 | import org.springframework.beans.factory.config.BeanDefinition;
|
| 32 | +import org.springframework.beans.factory.config.BeanPostProcessor; |
| 33 | +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; |
30 | 34 | import org.springframework.context.annotation.Bean;
|
31 | 35 | import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
|
32 | 36 | import org.springframework.context.annotation.Configuration;
|
|
63 | 67 | import org.springframework.data.mapping.model.PropertyNameFieldNamingStrategy;
|
64 | 68 | import org.springframework.transaction.TransactionManager;
|
65 | 69 | import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource;
|
| 70 | +import org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration; |
| 71 | +import org.springframework.transaction.config.TransactionManagementConfigUtils; |
66 | 72 | import org.springframework.transaction.interceptor.TransactionAttributeSource;
|
67 | 73 | import org.springframework.transaction.interceptor.TransactionInterceptor;
|
68 | 74 | import org.springframework.transaction.support.TransactionTemplate;
|
@@ -374,19 +380,32 @@ public CouchbaseTransactionalOperator couchbaseTransactionalOperator(
|
374 | 380 | return CouchbaseTransactionalOperator.create(couchbaseCallbackTransactionManager);
|
375 | 381 | }
|
376 | 382 |
|
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 | + } |
390 | 409 | /**
|
391 | 410 | * Configure whether to automatically create indices for domain types by deriving the from the entity or not.
|
392 | 411 | */
|
|
0 commit comments