@EnableTransactionalManager
- 利用TransactionManagementConfigurationSelector 给容器中注入bean,导入2个组件:
- AutoProxyRegistrar
- ProxyTransactionManagementConfiguration
AutoProxyRegistrar
InfrastructureAdvisorAutoProxyCreator
给容器中注册一个这个组件类uml图中可以看出,这个组件和aop中的实现很类似
- ProxyTransactionManagementConfiguration
- 给容器中添加事务增强器
- 事务增强器要用到事务的注解信息,用AnnotationTransactionAttributeSource,解析事务的注解参数
事务拦截器 TransactionInterceptor ,保存了事务属性,事务管理器,是一个
MethodInterceptor
,在目标方法执行的时候执行拦截器链。TransactionAttribute txAttr = tas != null ? tas.getTransactionAttribute(method, targetClass) : null; PlatformTransactionManager tm = this.determineTransactionManager(txAttr);
- 先获取事务的属性
- 获取
PlatformTransactionManager
,如果事先没有添加,则从ioc中获取PlatformTransactionManager, 执行目标方法,如果异常,获取到事务管理器,利用事务管理器回滚这次操作。如果正常,利用事务管理器,提交事务。
https://github.com/fulln
- 给容器中添加事务增强器
内容来源于网络如有侵权请私信删除
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!