美文网首页
Spring源码学习⑩-事务控制(原理)

Spring源码学习⑩-事务控制(原理)

作者: 曾慧婷 | 来源:发表于2019-05-12 18:55 被阅读0次

    1、@EnableTransactionManagement(包含注解@TransactionManagementConfigurationSelector)

            利用@TransactionManagementConfigurationSelector给容器注册了两个组件:

                AutoProxyRegistrar

                ProxyTransactionManagementConfiguration

    2、AutoProxyRegistrar

            给容器注册了一个InfrastructureAdvisorAutoProxyCreator组件(后置处理器)

            InfrastructureAdvisorAutoProxyCreator:

                利用后置处理器机制在创建对象之后,包装对象,但会一个代理对象(增强器),代理对象方法利用拦截器链(包含ProxyTransactionManagementConfiguration创建的拦截器)进行调用。

    3、ProxyTransactionManagementConfiguration

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

                1)、事务增强器要用事务注解的信息,所以保存了AnnotationTransactionAttributeSource,解析事务注解

                2)、事务增强器还需要事务拦截器信息:

                    TransactionInterceptor:其中该拦截器保存了事务属性信息和事务管理器。并且它是一个MethodInterceptor

                    所以在目标方法执行的时候:

                        执行拦截器链

                            事务拦截器(TransactionInterceptor)实现逻辑:

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

                                2)、再获取事务管理器PlatformTransactionManager

                                            如果实现没有添加指定的任何transactionManager(这里说的指定是说,在标注@Transactional注解时直接通过@Transactional(transactionManager="")指定的),最终会从容器中根据类型获取一个PlatformTransactionManager(也就是对应我们使用步骤的3-配置事务管理器)

                                3)、执行目标方法

                                        如果异常,获取事务管理器,利用事务管理器回滚事务。

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

                                

                    

    相关文章

      网友评论

          本文标题:Spring源码学习⑩-事务控制(原理)

          本文链接:https://www.haomeiwen.com/subject/bgxhaqtx.html