Spring Boot自動配置:Transaction AutoConfigration
13667 ワード
概要
また、
注釈を使う
注釈を使う 登録ツール
ベース
ソースコード
ソースコードバージョン:spring-book-at configre-2.13.RELEASE
TransactionAutoConfiguration
は、Spring Boot
のトランザクションに関する自動構成クラスである.PlatformTransactionManager
はクラスclasspath
がJtaAutoConfiguration
上に存在する場合にのみ有効である.そして以下の自動構成クラスのアプリケーションの後に適用します.HibernateJpaAutoConfiguration
DataSourceTransactionManagerAutoConfiguration
Neo4jDataAutoConfiguration
TransactionAutoConfiguration
bean
は、以下のように定義されている.TransactionManagerCustomizers platformTransactionManagerCustomizers
容器内に存在する全てのPlatformTransactionManagerCustomizer
bean
コンポーネントの一つの包装についてTransactionTemplate transactionTemplate
PlatformTransactionManager
bean
コンポーネントが容器内に存在する場合のみ定義される.TransactionAutoConfiguration
は、構成属性項目spring.aop.proxy-target-class
の使用状況に応じて、注釈@EnableTransactionManagement
の使用方法を決定する.spring.aop.proxy-target-class
は、false
に明確に設定されている.注釈を使う
@EnableTransactionManagement(proxyTargetClass = false)
spring.aop.proxy-target-class
が使用されていない、またはtrue
に設定されている.注釈を使う
@EnableTransactionManagement(proxyTargetClass = true)
TransactionAutoConfiguration
は注釈@EnableTransactionManagement
を使用し、注釈@EnableTransactionManagement
はさらにクラスTransactionManagementConfigurationSelector
を導入している.これは@EnableTransactionManagement
の注釈属性mode
に基づいて、どのクラスの導入を決定するかを決定するImportSelector
である.デフォルトの場合、注釈@EnableTransactionManagement
の属性mode
はPROXY
であり、この場合TransactionManagementConfigurationSelector
はこれに応じてAutoProxyRegistrar
およびProxyTransactionManagementConfiguration
を導入している.AutoProxyRegistrar
はさらに、以下の基礎設定bean
を容器に登録する.bean
org.springframework.aop.config.internalAutoProxyCreator
bean
類:InfrastructureAdvisorAutoProxyCreator
AopConfigUtils#registerAutoProxyCreatorIfNecessary
ProxyTransactionManagementConfiguration
はさらに、以下の基礎設定bean
を容器に登録する.bean
org.springframework.transaction.config.internalTransactionAdvisor
bean
類:BeanFactoryTransactionAttributeSourceAdvisor
bean
transactionAttributeSource
およびtransactionInterceptor
に依存する.bean
transactionInterceptor
bean
類:TransactionInterceptor
bean
transactionAttributeSource
に依存しています.bean
transactionAttributeSource
bean
類:AnnotationTransactionAttributeSource
bean
org.springframework.transaction.config.internalTransactionalEventListenerFactory
bean
類:TransactionalEventListenerFactory
AbstractTransactionManagementConfiguration
によって定義される.ソースコード
ソースコードバージョン:spring-book-at configre-2.13.RELEASE
package org.springframework.boot.autoconfigure.transaction;
// imports
@Configuration
// PlatformTransactionManager classpath
@ConditionalOnClass(PlatformTransactionManager.class)
//
@AutoConfigureAfter({ JtaAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
Neo4jDataAutoConfiguration.class })
// spring.transaction bean TransactionProperties
@EnableConfigurationProperties(TransactionProperties.class)
public class TransactionAutoConfiguration {
// bean TransactionManagerCustomizers platformTransactionManagerCustomizers
@Bean
// bean
@ConditionalOnMissingBean
public TransactionManagerCustomizers platformTransactionManagerCustomizers(
ObjectProvider<PlatformTransactionManagerCustomizer<?>> customizers) {
return new TransactionManagerCustomizers(
customizers.orderedStream().collect(Collectors.toList()));
}
//
@Configuration
// PlatformTransactionManager bean
@ConditionalOnSingleCandidate(PlatformTransactionManager.class)
public static class TransactionTemplateConfiguration {
private final PlatformTransactionManager transactionManager;
public TransactionTemplateConfiguration(
PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
// bean TransactionTemplate transactionTemplate
@Bean
// bean
@ConditionalOnMissingBean
public TransactionTemplate transactionTemplate() {
return new TransactionTemplate(this.transactionManager);
}
}
//
@Configuration
// bean PlatformTransactionManager
@ConditionalOnBean(PlatformTransactionManager.class)
// bean AbstractTransactionManagementConfiguration
@ConditionalOnMissingBean(AbstractTransactionManagementConfiguration.class)
public static class EnableTransactionManagementConfiguration {
//
// spring.aop.proxy-target-class false
// @EnableTransactionManagement(proxyTargetClass = false)
@Configuration
@EnableTransactionManagement(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false",
matchIfMissing = false)
public static class JdkDynamicAutoProxyConfiguration {
}
//
// spring.aop.proxy-target-class true
// @EnableTransactionManagement(proxyTargetClass = true)
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true",
matchIfMissing = true)
public static class CglibAutoProxyConfiguration {
}
}
}