Spring事务源码(1)

应用事务步骤:

1)配置类上添加注解@EnableTransactionManagement开启事务;

2)事务方法上添加注解:@Transactional;

3)将事务管理器注册到容器中;

原理:

1)@EnableTransactionManagement:利用TransactionManagementConfigurationSelector(xxxselector会返回组件的全类名)给容器导入两个组件;

        AutoProxyRegistrarProxyTransactionManagementConfiguration;

2)AutoProxyRegistrar组件:(registerBeanDefinitions())做了什么?---- 给容器中注册一个组件:InfrastructureAdvisorAutoProxyCreator;是一个后置处理器;

代码如下:

标题

   

InfrastructureAdvisorAutoProxyCreator继承关系图

 它利用后置处理器机制在对象创建以后,包装对象并返回一个包含增强器的代理对象,代理对象执行方法利用拦截器链进行调用。

3)ProxyTransactionManagementConfiguration组件;做了什么?-----是一个配置类,利用@Bean给容器注册各种组件;

标题

 

        给容器中注册事务增强器(BeanFactoryTransactionAttributeSourceAdvisor);

                a)事务增强器需要事务注解的参数信息,AnnotationTransactionAttributeSource解析事务注解;

 

 

 

 

                b)事务拦截器:

                TransactionInterceptor:保存了事务属性信息,事务管理器;

标题
public class TransactionInterceptor extends TransactionAspectSupport implements MethodInterceptor, Serializable {}
TransactionInterceptor继承关系图

 

                他是一个MethodInterceptor(方法拦截器);

TransactionInterceptor.invoke()

                在目标方法执行的时候执行拦截器链;事务拦截器:

                        1)先获取事务相关的属性;

                        2)在获取PlatformTransactionManager,如果事先没有添加任何指定的transactionmanager,最终会从容器中按照类型获取一个PlatformTransactionManager;

标题

 

                        3)执行目标方法

                        如果有异常,获取到事务管理器,利用事务管理回滚操作;

                        如果正常,利用事务管理器,提交事务。

执行目标方法

 

     

                   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值