spring 事务 @EnableTransactionManagement原理

Posted 沫小淘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 事务 @EnableTransactionManagement原理相关的知识,希望对你有一定的参考价值。

@EnableXXX原理:注解上有个XXXRegistrar,或通过XXXSelector引入XXXRegistrar,XXXRegistrar实现了 
ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,给容器注册XXXCreator。这个Creator实现了后置处理器, 
后置处理器在对象创建以后,包装对象,返回一个代理对象,代理对象执行方法利用拦截器链进行调用

* 1)、@EnableTransactionManagement
*        利用TransactionManagementConfigurationSelector给容器中会导入组件
*        导入两个组件
*        AutoProxyRegistrar
*        ProxyTransactionManagementConfiguration
* 2)、AutoProxyRegistrar:
*        给容器中注册一个 InfrastructureAdvisorAutoProxyCreator 组件;
*        利用后置处理器机制在对象创建以后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链进行调用;
* 3)、ProxyTransactionManagementConfiguration是个@Configuration
*        1、给容器中注册事务增强器transactionAdvisor;
*           1)、事务增强器要用事务注解的信息,AnnotationTransactionAttributeSource解析事务注解
*           2)、事务拦截器transactionInterceptor:
*              TransactionInterceptor;保存了事务属性信息,事务管理器;
*              TransactionInterceptor是一个 MethodInterceptor;
*              在目标方法执行的时候;
*                 执行拦截器链;
*                 只有事务拦截器:
*                    1)、先获取事务相关的属性
*                    2)、再获取PlatformTransactionManager,如果事先没有添加指定任何transactionmanger
*                       最终会从容器中按照类型获取一个PlatformTransactionManager;
*                    3)、执行目标方法
*                       如果异常,获取到事务管理器,利用事务管理回滚操作;
*                       如果正常,利用事务管理器,提交事务


以上是关于spring 事务 @EnableTransactionManagement原理的主要内容,如果未能解决你的问题,请参考以下文章

Spring本地事务

如何手动开启spring事务

spring的读写事务和只读事务的区别

什么叫做spring的声明式事务

Spring框架--Spring事务管理和Spring事务传播行为

Spring框架--Spring事务管理和Spring事务传播行为