@EnableTransactionalManager 发生了什么

2019-10-31 16:05:15来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

@EnableTransactionalManager 发生了什么

@EnableTransactionalManager

  1. 利用TransactionManagementConfigurationSelector 给容器中注入bean,导入2个组件:
    • AutoProxyRegistrar
    • ProxyTransactionManagementConfiguration
  2. AutoProxyRegistrar
    InfrastructureAdvisorAutoProxyCreator 给容器中注册一个这个组件

    类uml图中可以看出,这个组件和aop中的实现很类似

    file

    该组件利用后置处理器在对象创建之后,返回一个代理对象,代理对象执行方法利用拦截器链进行调用
  3. ProxyTransactionManagementConfiguration
    1. 给容器中添加事务增强器
      • 事务增强器要用到事务的注解信息,用AnnotationTransactionAttributeSource,解析事务的注解参数
      • 事务拦截器 TransactionInterceptor ,保存了事务属性,事务管理器,是一个 MethodInterceptor ,在目标方法执行的时候执行拦截器链。

        TransactionAttribute txAttr = tas != null ? tas.getTransactionAttribute(method, targetClass) : null;
        PlatformTransactionManager tm = this.determineTransactionManager(txAttr);
        1. 先获取事务的属性
        2. 获取PlatformTransactionManager,如果事先没有添加,则从ioc中获取PlatformTransactionManager,
        3. 执行目标方法,如果异常,获取到事务管理器,利用事务管理器回滚这次操作。如果正常,利用事务管理器,提交事务。

          https://github.com/fulln


原文链接:https://www.cnblogs.com/wzqshb/p/11771499.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:数字签名与数字加密的区别

下一篇:String