返回介绍

10.2 事务自定义标签

发布于 2025-04-22 22:09:16 字数 1438 浏览 0 评论 0 收藏

对于 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" />

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。