本文关联的代码版本为spring-jdbc 5.2.6.RELEASE
@EnableTransactionManagement
@EnableTransactionManagement利用@Import(TransactionManagementConfigurationSelector.class)给容器中导入
AutoProxyRegistrar 和ProxyTransactionManagementConfiguration两个组件。
AutoProxyRegistrar
给容器注册一个InfrastructureAdvisorAutoProxyCreator组件(利用后置处理器在创建对象以后,包装对象,返回一个代理对象(增强器),
代理对象执行方法利用拦截器链进行调用),
ProxyTransactionManagementConfiguration
- ProxyTransactionManagementConfiguration给容器注册事务增强器,
- 事物增强器要事物注解信息,AnnotationTransactionAttributeSource解析事物注解
- 事物拦截器:
- TransactionInterceptor:保存了事物属性信息,事物管理器;
- 它是一个MethodIntercept:在目标方法执行的时候,执行拦截器链、事物拦截器链
- 先获取事物相关的属性
- 在获取PlatformTransactionManager:如果事先没有添加指定transactionManager,最终回从容器中按照类型获取一个PlatformTransactionManager。
- 执行目标方法:
- 如果有异常,获取事物管理器,利用事物管理器回滚操作;
- 如果正常,利用事物管理器,提交事物。
网友评论