Spring 事务源码全解析:从 <tx:annotation-driven/> 到事务提交的完整链路
Spring 事务管理是 AOP 思想的典型应用,其核心是通过 <tx:annotation-driven/> 配置开启注解式事务,底层依赖 “自定义标签解析→事务组件注册→AOP 代理增强→事务生命周期管理” 的完整机制。从配置解析到事务执行,逐环节拆解 Spring 事务的实现原理。
事务配置的解析:<tx:annotation-driven/> 标签处理
与 AOP 的 <aop:aspectj-autoproxy/> 类似,<tx:annotation-driven/> 是 Spring 事务的核心配置标签,其解析依赖自定义标签机制,最终目的是向容器注册事务管理的核心组件。
自定义标签映射与处理器初始化
<tx:annotation-driven/> 的命名空间为 http://www.springframework.org/schema/tx,Spring 通过 META-INF/spring.handlers 映射到对应的处理器 TxNamespaceHandler:
1 2
| http\://www.springframework.org/schema/tx=org.springframework.transaction.config.TxNamespaceHandler
|
TxNamespaceHandler 的 init() 方法注册了标签解析器,其中 <tx:annotation-driven/> 对应 AnnotationDrivenBeanDefinitionParser:
1 2 3 4 5 6 7 8 9 10 11
| public class TxNamespaceHandler extends NamespaceHandlerSupport { @Override public void init() { registerBeanDefinitionParser("advice", new TxAdviceBeanDefinitionParser()); registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser()); registerBeanDefinitionParser("jta-transaction-manager", new JtaTransactionManagerBeanDefinitionParser()); } }
|
AnnotationDrivenBeanDefinitionParser:事务核心组件的注册
AnnotationDrivenBeanDefinitionParser 的 parse() 方法是事务配置解析的核心,根据 mode 属性(默认 proxy)决定事务增强方式,最终通过 AopAutoProxyConfigurer.configureAutoProxyCreator() 注册事务管理的核心组件。
该方法向容器注册 4 个关键组件,构成事务管理的基础: