Spring 5.x 源码之旅五十八AOP事务的初始化流程一

初始化流程图

在这里插入图片描述

事务的初始化流程

前面讲了事务的注解的作用,需要一些类的辅助,那这些类是什么时候创建,又是做什么的呢,我们来看看。

AutoProxyRegistrar创建

spring的初始化流程前面有讲过,会用ConfigurationClassPostProcessor进行注解配置类的解析,如果遇到ImportBeanDefinitionRegistrar的话,会进行实例化,然后到后面的加载bean定义的时候调用loadBeanDefinitionsFromRegistrars执行他们的registerBeanDefinitions方法,AutoProxyRegistrar会进行InfrastructureAdvisorAutoProxyCreator处理器的注册。

TransactionalEventListenerFactory创建

然后到了invokeBeanFactoryPostProcessors这里,内部的EventListenerMethodProcessor会进行postProcessBeanFactory处理,将TransactionalEventListenerFactory创建出来。
在这里插入图片描述

InfrastructureAdvisorAutoProxyCreator创建

在这里插入图片描述

AbstractAutoProxyCreator的postProcessAfterInitialization

随后进行实例化的时候,第一次调用InfrastructureAdvisorAutoProxyCreatorpostProcessAfterInitializationAOP寻找切面注解类似,这个也会去寻找事务注解并创建通知,并进行相应对象的动态代理:
在这里插入图片描述

AbstractAdvisorAutoProxyCreator的findCandidateAdvisors

先进行通知器的查找:
在这里插入图片描述

BeanFactoryAdvisorRetrievalHelper的findAdvisorBeans

先根据类型查找所有的Advisor,其实就是BeanFactoryTransactionAttributeSourceAdvisor
在这里插入图片描述

BeanFactoryTransactionAttributeSourceAdvisor准备实例化

然后直接进行获取:
在这里插入图片描述

ProxyTransactionManagementConfiguration作为工厂被先实例化

由于BeanFactoryTransactionAttributeSourceAdvisor的创建方法是bean注解的方法,属于工厂方法,所以得需要先有工厂实例,才可以反射调用方法实例化。
在这里插入图片描述
所以先是进行ProxyTransactionManagementConfiguration的实例化:
在这里插入图片描述

BeanFactoryTransactionAttributeSourceAdvisor工厂方法属性注入

这个工厂方法还有两个属性注入,所以又会去创建两个实例。
在这里插入图片描述

AnnotationTransactionAttributeSource和TransactionInterceptor实例化作为属性注入

其实他们也是用工厂方法创建的,只是前面已经把工厂ProxyTransactionManagementConfiguration创建了,所以这里只要直接反射调用工厂方法就好了:
在这里插入图片描述

BeanFactoryTransactionAttributeSourceAdvisor实例化

前面工厂实例化,工厂方法参数注入实例化后,就可以调用BeanFactoryTransactionAttributeSourceAdvisor的工厂方法进行实例化了。
在这里插入图片描述
我们把事务的一些类的初始化流程理了一下,所有相关的类也实例化了,主要是为了BeanFactoryTransactionAttributeSourceAdvisor的实例化,现在找到了这个通知器,后面就要检查每个实例是否需要通知器了,也就是AbstractAdvisorAutoProxyCreatorfindAdvisorsThatCanApply

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值