SpringBoot 在启动时已经加载了事务管理器,所以只需要在需要添加事务的方法/类上添加@Transactional
即可生效,无需额外配置。
TransactionAutoConfiguration
事务的自动配置类解析:
SpringBoot 启动时加载/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
或者spring.factories
文件中定义的所有自动配置类。其中包含了org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
事务自动配置类。
配置类中使用注解@ConditionalOnClass
验证了PlatformTransactionManager.class
接口的实例是否存在。接口的实现类如下:
接口的实现类中包含了DataSourceTransactionManager
类,这个类在 SpringBoot 启动时通过org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
配置类进行了导入,如下图。所以容器中就包含了PlatformTransactionManager.class
类型的实例,所以TransactionAutoConfiguration
配置类正常加载。
TransactionAutoConfiguration
配置类中编写了一个内部类public static class EnableTransactionManagementConfiguration
,其中包含了@EnableTransactionManagement
注解,所以这也就是为什么启动类中不添加@EnableTransactionManagement
注解事务也能生效的原因。