TransactionTemplate : 顶级接口 用户配置 PlatfromTransactionManager
PlatfromTransactionManager : 公共接口 用于 获取 TransactionDefinition 事务配置 以及 commit 或者 rollback
TransactionDefinition: 定义隔离级别 以及各种配置
TransactionStatus: 当前隔离状态
使用@EnableTransactionManagement可以启用事务管理 然后再各个需要事务的地方设置@Transaction即克出发事务
源码:
1,通过 EnableTransactionManagement 导入 TransactionManagementConfigurationSelector 选择器,ImportSelect 及使用 ConfigureClassParseListenre 导入
该配置中所有类的名字 然后向容器中注入 该bean
2,向容器中注入 ProxyTransactionManagementConfiguration 配置类
3,通过该配置向容器注入 TransactionInterceptor
TransactionInterceptor 继承 MethodInterceptor 即使用 代理
通过向 TransactionInterceptor 中配置 事务属性 以及 PlatfromTransactionManager 完成 事务拦截器生成
4, 事务属性配置 可以配置 拦截器 应该拦截什么样的执行方法 启用事务
5,传入的 PlatfromTransactionManager 用于传入该设置什么样的 拦截器 以及隔离状态 以及 隔离级别
执行:
生成的事务拦截器代理,执行的时候 MethodInvocation 根据拦截器链 先执行 然后执行真正的事务
1,创建 TransactionInfo(其中含有 PlatfromTransactionManager) 并将
2,根据 PlatfromTransactionManager 生成一个 TransactionStatus
3, 生成 TransactionStatus 时 会 生成一个 connection 由 TransactionSynchronizationManager.getResource(getDataSource());
4, 将 TransactionInfo 绑定到 当前线程
5, 执行当前线程
6,根据执行状况 来执行 commit 或者 rollback
通过 BeanFactoryTransactionAttributeSourceAdvisor 注入到 容器中 形成 拦截器