@EnableTransactionalManager
-
利用TransactionManagementConfigurationSelector 给容器中注入bean,导入2个组件:
- AutoProxyRegistrar
- ProxyTransactionManagementConfiguration
-
AutoProxyRegistrar
InfrastructureAdvisorAutoProxyCreator
给容器中注册一个这个组件类uml图中可以看出,这个组件和aop中的实现很类似
该组件利用后置处理器在对象创建之后,返回一个代理对象,代理对象执行方法利用拦截器链进行调用
-
ProxyTransactionManagementConfiguration
-
给容器中添加事务增强器
* 事务增强器要用到事务的注解信息,用AnnotationTransactionAttributeSource,解析事务的注解参数 * 事务拦截器 TransactionInterceptor ,保存了事务属性,事务管理器,是一个 `MethodInterceptor` ,在目标方法执行的时候执行拦截器链。 ```java TransactionAttribute txAttr = tas != null ? tas.getTransactionAttribute(method, targetClass) : null; PlatformTransactionManager tm = this.determineTransactionManager(txAttr); ``` 1. 先获取事务的属性 2. 获取`PlatformTransactionManager`,如果事先没有添加,则从ioc中获取PlatformTransactionManager, 3. 执行目标方法,如果异常,获取到事务管理器,利用事务管理器回滚这次操作。如果正常,利用事务管理器,提交事务。
-
https://github.com/fulln
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。