在springboot项目中,无需使用@EnableTransactionManagement注解,可以直接在业务方法上添加@Transactional注解,即可;但是如果是单纯的springmvc项目的话,就需要在配置类上添加@EnableTransactionManagement注解来开启全局事务
其实原因也很简单,就是因为springboot项目在启动的时候,帮我们自动添加了@EnableTransactionManagement注解;
在spring-boot-autoconfigure-2.2.2.RELEASE.jar这个jar包中,定义了要自动注入的bean
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
但是这个bean的注入,有一个前提条件,必须在DataSourceTransactionManagerAutoConfiguration这个bean注入之后,才会注入TransactionAutoConfiguration
在TransactionAutoConfiguration这个bean中,声明了一个静态内部类:EnableTransactionManagementConfiguration
在其类中,声明了开启事务注解的注释
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnBean({
TransactionManager.class})
@ConditionalOnMissingBean({
AbstractTransactionManagementConfiguration.class})
public static class EnableTransactionManagementConfiguration {
public EnableTransactionManagementConfiguration() {
}
@Configuration(
proxyBeanMethods = false
)
@EnableTransactionManagement(
proxyTargetClass = true
)
@ConditionalOnProperty(
prefix = "spring.aop",
name = {
"proxy-target-class"},
havingValue = "true",
matchIfMissing = true
)
public static class CglibAutoProxyConfiguration {
public CglibAutoProxyConfiguration() {
}
}
@Configuration(
proxyBeanMethods = false
)
@EnableTransactionManagement(
proxyTargetClass = false
)
@ConditionalOnProperty(
prefix = "spring.aop",
name = {
"proxy-target-class"},
havingValue = "false",
matchIfMissing = false
)
public static class JdkDynamicAutoProxyConfiguration {
public JdkDynamicAutoProxyConfiguration() {
}
}
}