# 为何不使用 @EnableTransactionManagement
就能使用事务?
在使用 SpringMVC 的时候一般需要我们配置开启事务管理器,boot 中为何不用开启 @EnableTransactionManagement
? 直接使用 @Transactional
就可以了?
针对于这个问题,首先可能想到的就是 Spring Boot 给我吗提供了自动装配,那么去查看下 META-INF/spring.factories
中与事物相关的类
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
1
里面有好几个事物相关的,TransactionAutoConfiguration 这个一个是一个主配置类,里面主要关注下
@Configuration
@ConditionalOnBean(PlatformTransactionManager.class)
@ConditionalOnMissingBean(AbstractTransactionManagementConfiguration.class)
public static class EnableTransactionManagementConfiguration {
@Configuration
@EnableTransactionManagement(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class",
havingValue = "false", matchIfMissing = false)
public static class JdkDynamicAutoProxyConfiguration {
}
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class",
havingValue = "true", matchIfMissing = true)
public static class CglibAutoProxyConfiguration {
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
可以看到,在这里使用的 @EnableTransactionManagement
,可以看到这里使用的是 aop 来实现事物的管理,配置了动态代理和 Cglib 的代理