@Transactional事务及@EnableTransactionManagement原理

1.bean.xml  <tx:annotation-driven/> 开启注解式事务

2.或@EnableTransactionManagement 开启注解的事务管理

3.注册事务管理器在容器中

    @Bean

    public PlatformTransactionManager transactionManager(){

            return new DataSourceTransactionManager(dataSource());//传入数据源

    }

======================以上是事务配置思路===========================

1)@EnableTransactionManagement原理(和切面一样)

TransactionManagementConfigurationSelector给容器导入两个组件AutoProxyRegistrar和ProxyTransactionManagementConfiguration

    1.1)AutoProxyRegistrar给容器注册InfrastructureAdvisorAutoProxyCreator组件(也是后置处理器)

利用后置处理器机制在对象创建后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链执行 

    1.2) ProxyTransactionManagementConfiguration做了什么?

    1.2.1)给容器注册事务增强器:

        1.2.1.1)事务增强器要用事务注解的信息,AnnotationTransactionAttributeSource解析事务注解

        1.2.1.2)事务拦截器:TransactionInterceptor:保存了事务属性信息,事务管理器,是一个MethodInterceptor

        1.2.1.3)MethodInterceptor在目标方法执行的时候,执行拦截器链(事务拦截器)

        1.2.1.3)事务拦截器:

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

                2)再获取TransactionManager

                3)执行目标方法,如果异常,利用事务管理器并回滚操作;如果正常,利用事务管理器提交

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容