spring学习总结016 --- spring事务原理

前面介绍了事务的使用方法,开启事务可以通过@EnableTransactionManagement或者<tx:annotation-driven />,前面说过spring的事务实现是基于AOP实现的,下面分析下spring事务的实现原理

@EnableTransactionManagement

和AOP类似,开启事务注解使用了bean导入注解@Import,通过ImportSelector方式导入bean;实现类为TransactionManagementConfigurationSelector

在代理模式mode=AdviceMode.PROXY时,指定通过AutoProxyRegistrar和ProxyTransactionManagementConfiguration方式导入bean

AutoProxyRegistrar

该类为ImportBeanDefinitionRegistrar接口的实现类,用于动态注册bean定义,跟踪源码,找到其动态注册了InfrastructureAdvisorAutoProxyCreator类型的bean

InfrastructureAdvisorAutoProxyCreator为bean后置处理器,在postProcessAfterInitialization方法中创建代理对象

ProxyTransactionManagementConfiguration

该类为spring配置类,主要注册了如下三种bean定义:

1、AnnotationTransactionAttributeSource

用于扫描使用@Transactional注解的方法,并读取事务配置getTransactionAttribute方法,如事务传播行为、隔离级别等

2、TransactionInterceptor

spring事务中很重要的类,提供了事务执行的方式, invoke方法;并且注入了事务管理器属性;

执行流程

3、BeanFactoryTransactionAttributeSourceAdvisor

Advisor实现类,遵从Advisor规范,在代理调用时,调用该类的增强方法getAdvice;该类注入了TransactionInterceptor,因此会先使用TransactionInterceptor进行增强;

XML配置方式事务原理

前面的AOP和事务都是以注解的方式进行说明的,这里说明下XML方式的原理;

spring中解析XML定义都是通过NameSpaceHandler来解析的,spring事务通过TxNameSpaceHandler来解析

 

posted @ 2020-07-21 22:04  光头用沙宣  阅读(172)  评论(0编辑  收藏  举报