声明式事务原理——1. @EnableTransactionManagement

本文深入探讨了Spring框架中的@EnableTransactionManagement注解的原理,它用于导入事务管理相关的Bean。该注解的实现依赖于AOP动态代理,通过TransactionAttributeSource解析事务注解,并由PlatformTransactionManager执行事务管理。文中还提到了方法调用流程及与其他AOP相关注解的关联。
摘要由CSDN通过智能技术生成
@EnableTransactionManagement

可以看出这个注解的主要作用是导入TransactionManagementConfigurationSelector

@Import(TransactionManagementConfigurationSelector.class)
public @interface EnableTransactionManagement {
   
	boolean proxyTargetClass() default false;
	AdviceMode mode() default AdviceMode.PROXY;
	int order() default Ordered.LOWEST_PRECEDENCE;
}
TransactionManagementConfigurationSelector

可以看出TransactionManagementConfigurationSelector继承自ImportSelector接口,说明此类的作用是导入相关bean。
TransactionManagementConfigurationSelector

public class TransactionManagementConfigurationSelector extends AdviceModeImportSelector<EnableTransactionManagement> {
   
	@Override
	protected String[] selectImports(AdviceMode adviceMode) {
   
		switch (adviceMode) {
   
			// 默认是 PROXY 类型,那就以它为例。导入了两个类。
			case PROXY:
				return new String[] {
   AutoProxyRegistrar.class.getName(), ProxyTransactionManagementConfiguration.class.getName()};
			case ASPECTJ:
				return new String[] {
   TransactionManagementConfigUtils.TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME};
			default:
				return null;
		}
	}
}

AutoProxyRegistrar

AutoProxyRegistrar继承自ImportBeanDefinitionRegistrar,说明它的作用也是导入相关bean。

public class AutoProxyRegistrar implements ImportBeanDefinitionRegistrar {
   
	@Override
	public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
   
		boolean candidateFound = false;
		Set<String> annTypes = importingClassMetadata.getAnnotationTypes();
		for (String annType : annTypes) {
   
			AnnotationAttributes candidate = AnnotationConfigUtils.attributesFor(importingClassMetadata, annType);
			if (candidate == null) {
   
				continue;
			}
			Object mode = candidate.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值