首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >为何不使用 @EnableTransactionManagement 就能使用事物(十二)

为何不使用 @EnableTransactionManagement 就能使用事物(十二)

作者头像
高大北
发布于 2022-06-14 19:55:39
发布于 2022-06-14 19:55:39
8760
举报

在使用 SpringMVC 的时候一般需要我们配置开启事务管理器,boot 中为何不用开启 @EnableTransactionManagement? 直接使用 @Transactional 就可以了? 针对于这个问题,首先可能想到的就是 Spring Boot 给我们提供了自动装配,那么去查看下 META-INF/spring.factories 中与事物相关的类

代码语言:javascript
复制
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\

里面有好几个事物相关的,TransactionAutoConfiguration 这个一个是一个主配置类,里面主要关注下

代码语言:javascript
复制
	@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 {

		}

	}

可以看到,在这里使用的 @EnableTransactionManagement,使用的是 aop 来实现事物的管理,配置了动态代理和 Cglib 的代理

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档