- 前言
- 第一部分 核心实现
- 第 1 章 Spring 整体架构和环境搭建
- 第 2 章 容器的基本实现
- 第 3 章 默认标签的解析
- 第 4 章 自定义标签的解析
- 第 5 章 bean 的加载
- 第 6 章 容器的功能扩展
- 第 7 章 AOP
- 第二部分 企业应用
- 第 8 章 数据库连接 JDBC
- 第 9 章 整合 MyBatis
- 第 10 章 事务
- 第 11 章 SpringMVC
- 第 12 章 远程服务
- 第 13 章 Spring 消息
10.2 事务自定义标签
对于 Spring 中事务功能的代码分析,我们首先从配置文件开始入手,在配置文件中有这样一个配置:<tx:annotation-driven />。可以说此处配置是事务的开关,如果没有此处配置,那么 Spring 中将不存在事务的功能。那么我们就从这个配置开始分析。
根据之前的分析,我们因此可以判断,在自定义标签中的解析过程中一定是做了一些辅助操作,于是我们先从自定义标签入手进行分析。
使用 Eclipse 搜索全局代码,关键字 annotation-drive,最终锁定类 TxNamespaceHandler,在 TxNamespaceHandler 中的 init 方法中:
public void init() {
registerBeanDefinitionParser("advice", new TxAdviceBeanDefinitionParser());
registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBean
DefinitionParser());
registerBeanDefinitionParser("jta-transaction-manager", new JtaTransactionManagerBean
DefinitionParser());
}
根据自定义标签的使用规则以及上面的代码,可以知道,在遇到诸如<tx:annotation-driven 为开头的配置后,Spring 都会使用 AnnotationDrivenBeanDefinitionParser 类的 parse 方法进行解析。
public BeanDefinition parse(Element element, ParserContext parserContext) {
String mode = element.getAttribute("mode");
if ("aspectj".equals(mode)) {
// mode="aspectj"
registerTransactionAspect(element, parserContext);
}else {
// mode="proxy"
AopAutoProxyConfigurer.configureAutoProxyCreator(element, parserContext);
}
return null;
}
在解析中存在对于 mode 属性的判断,根据代码,如果我们需要使用 AspectJ 的方式进行事务切入(Spring 中的事务是以 AOP 为基础的),那么可以使用这样的配置:
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论