@Transactional 与@EnableTransactionManagement的使用及源码分析(二)

相关阅读

@Transactional 与@EnableTransactionManagement的使用及源码分析(一)

1.声明事务的源码分析

[1] @EnableTransactionManagement注解开启事务管理器
[2]注册AutoProxyRegistrar和ProxyTransactionManagementConfiguration
[3] 核心组件InfrastructureAdvisorAutoProxyCreator注册

下面我们将对如何找到AutoProxyRegistrar和ProxyTransactionManagementConfiguration这两个类,以及AutoProxyRegistrar背后对于InfrastructureAdvisorAutoProxyCreator的实现进行说明

2.探索一下相关的核心类

(1)点击该注解进入

在这里插入图片描述

(2)这个类下面通过

1)@Import(TransactionManagementConfigurationSelector.class)引入了一个事务管理器,点击进入查看
2)AdviceMode.PROXY; 默认定义的模型,对于后面判断有用
在这里插入图片描述在这里插入图片描述

(3)该类下声明了我们事务中的两个主要的类是对我们的AutoProxyRegistrar和ProxyTransactionManagementConfiguration进行注册,接下来我们先对AutoProxyRegistrar进行分析(这个类最后是生成我们的核心类InfrastructureAdvisorAutoProxyCreator,下面进行详细说明)
在这里插入图片描述

3.对AutoProxyRegistrar的解析

(1)该方法主要是取的我们相关的注解类
(2)继续点击进入registerAutoProxyCreatorIfNecessary()的方法
在这里插入图片描述
(3)继续点击registerAutoProxyCreatorIfNecessary()方法
在这里插入图片描述
(4)在这里的InfrastructureAdvisorAutoProxyCreator就是我们事务相关的核心类之一
(5)点击进入registerOrEscalateApcAsRequired( )该方法
在这里插入图片描述
(6)这里先通过判断我们上面定义的核心类InfrastructureAdvisorAutoProxyCreator是否有相关的bean id,如果有则直接进行相关设置;但很明显这是第一次创建,所以它返回的是null,然后继续执行下面的注册方法
在这里插入图片描述

4.InfrastructureAdvisorAutoProxyCreator的补充说明:

(1)根进这个InfrastructureAdvisorAutoProxyCreator类的时候,它有很多层继承关系,下图是它最终的继承关系图。

public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport
		implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware

[1] ProxyProcessorSupport 它是实现了Ordered接口的
[2]它的处理器SmartInstantiationAwareBeanPostProcessor最终实现的接口是BeanPostProcessor,但其实它的前,后置处理器的方法是在InstantiationAwareBeanPostProcessor上实现的

[3]简单说明一下InfrastructureAdvisorAutoProxyCreator这个类其实是我们的处理器相关的类,也就是产生我们对应事务处理器的处理方法,但是它并没有和我们加了@Transactional这个注解的事务类进行相关联。后面我们将会介绍它是如何通过ProxyTransactionManagementConfiguration这个类作为桥梁把我们普通的事务bean与相应的处理方法关联其来的。
InfrastructureAdvisorAutoProxyCreator对于我们事务的作用:
1)注册
2)利用后置处理器机制创建以后,返回一个代理对象(增强),代理对象执行方法时,利用拦截器进行调用

小结:

从上面的AutoProxyRegistrar类中相应的方法跟到最后,我们可以发现该类主要作用是生成的类InfrastructureAdvisorAutoProxyCreator,相应的bean id 为org.springframework.aop.config.internalAutoProxyCreator;不过这里只是进行了相应的注册,还没有实现创建过程,它的创建与AOP核心类AnnotationAwareAspectJAutoProxyCreator十分类似

可参考Spring AOP的使用及源码解读 (二)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值