Spring 声明式事务注解源码剖析

@EnableTransactionManagement

 1,通过@Import 引入了TransactionManagementConfigurationSelector类。

 2,TransactionManagementConfigurationSelector继承了AdviceModeImportSelector类,同时还去实现了selectImports方法,返回结果为类的权限类名

 3,通过查阅相关资料会进入到case Proxy中,这而会去返回两个类:AutoProxyRegistrar.class, ProxyTransactionManagementConfiguration.class。分开来看两个类

 A,AutoProxyRegistrar:

这个类 实现了ImportBeanDefinitionRegistrar接口,实现方法上单独的去看的话,视乎是去做了一些类注册相关的方法。而该方法中通过registerAutoProxyCreatorIfNecessary方法去注册了一个新的类。

 点进去查看注册的是InfrastructureAdvisorAutoProxyCreator类,这个类又继承了AbstractAdvisorAutoProxyCreator类,继续点进去其又继承了AbstractAutoProxyCreator类,而这个类Spring AOP 代理对象创建流程源码剖析有做过分析,为后置处理器类。

 B,ProxyTransactionManagementConfiguration

 首先可以明确该类为一个Spring容器配置注解类,该类一共有三个方法,主要用于对Spring容器中注入类

 第一个方法:transactionAdvisor(事务增强器) 

第二个方法:transactionAttributeSource(属性解析器),其内部持有一个事务注解的解析器集合,该集合的存放有三个实现类解析器,具体使用的是SpringTransactionAnnotaionParser。进入到该类中可以发现该类方法用来解析@Trasactional事务的属性

 第三个方法:transactionInterceptor(事务拦截器),实际上使用了MethodInterceptor,从命名上来看应该是一个方法的拦截接口。根据之前的AOP剖析时有提到过,会在代理对象创建之前对增强和拦截器进行合并,所以这里对于代理而言又是一层横切逻辑。

既然说是横切逻辑,对于代理自然会有一个invoke执行方法,而invokeWithinTransaction方法则为重要的执行事务的横切逻辑的方法。

 ☆ invokeWithinTransaction方法

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值