说在前面

本次开始spring-boot-autoconfigure源码解析之TransactionAutoConfiguration

源码解析

@Configuration
@ConditionalOnClass(PlatformTransactionManager.class)
@AutoConfigureAfter({ JtaAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
      DataSourceTransactionManagerAutoConfiguration.class,
      Neo4jDataAutoConfiguration.class })
@EnableConfigurationProperties(TransactionProperties.class)
public class TransactionAutoConfiguration {

   @Bean
   @ConditionalOnMissingBean
   public TransactionManagerCustomizers platformTransactionManagerCustomizers(
         ObjectProvider<List<PlatformTransactionManagerCustomizer<?>>> customizers) {
      return new TransactionManagerCustomizers(customizers.getIfAvailable());
   }

   @Configuration
   @ConditionalOnSingleCandidate(PlatformTransactionManager.class)
   public static class TransactionTemplateConfiguration {

      private final PlatformTransactionManager transactionManager;
      public TransactionTemplateConfiguration(
            PlatformTransactionManager transactionManager) {
         this.transactionManager = transactionManager;
      }

//    初始化TransactionTemplate
      @Bean
      @ConditionalOnMissingBean
      public TransactionTemplate transactionTemplate() {
         return new TransactionTemplate(this.transactionManager);
      }

   }

   @Configuration
   @ConditionalOnBean(PlatformTransactionManager.class)
   @ConditionalOnMissingBean(AbstractTransactionManagementConfiguration.class)
   public static class EnableTransactionManagementConfiguration {

      @Configuration
//    开启事务配置,spring.aop.proxy-target-class=false 采用jdk动态代理
      @EnableTransactionManagement(proxyTargetClass = false)
      @ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false", matchIfMissing = false)
      public static class JdkDynamicAutoProxyConfiguration {

      }

      @Configuration
//    开启事务配置,spring.aop.proxy-target-class=true 采用cglib动态代理
      @EnableTransactionManagement(proxyTargetClass = true)
      @ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true", matchIfMissing = true)
      public static class CglibAutoProxyConfiguration {

      }

   }

}

说在最后

本次仅代表个人观点,仅供参考。

03-29 15:33