38、[源码]-声明式事务-源码分析

原理

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