Spring 事务源码类功能介绍
在 spring-tx
工程中,总共有3个大包(package
),我们先介绍边缘包(dao、jca),再介绍核心流程包(transaction)。
在介绍先,建议可以去博主的源码库中拉取源码,对于事务的每个包的 package.info
都按类功能,包功能等做了总结。
还有,在我们不懂某一个类或者某个方法的功能时,我们一定要会单元测试,或者会去 源码工程中的test
包找对应的测试类。
一、边缘包
1.1 dao包
- 1、这个包还是比较简单的,但是设计的时候不好考虑,因为对于各种异常捕获和处理是至关重要的!
- 2、annotation包:其实就是针对Dao层异常转换处理。
- 3、support包:对于各种类型Dao的适配支持
- 比较重要的类:DaoSupport,子类实现:
- 如:JdbcDaoSupport,JdoDaoSupport,HibernateDaoSupport
- 比较重要的类:DaoSupport,子类实现:
1.2 jca包
先对两个名称说明一下:
1、jca
JCA代表Java EE连接器体系结构。
它是一种Java技术,通过向应用程序服务器及其应用程序提供连接,从而帮助它们连接到其他信息系统。
JCA为连接器服务定义了自己的SPI。
2、cci
CCI代表通用客户端接口.
它被定义为JCA的一部分。 用户应用程序用来访问JCA连接服务的API。
通过包名定义,我们可以大致知道该包的作用:就是 spring-tx
事务提供给用户或者第三方连接 spring 事务的,或者由用户自定义的一些事务适配 spring事务。
同样,先从边缘包介绍(work,support,endpoint,context),然后再介绍核心包(cci)。(其实我们看源码学习的过程就是这样的;先看边缘的包,再看核心包,再去跟核心流程,这样可以对某个源码工程设计有这清晰的认知,同时可以学习源码某些功能点的设计思想)
1.2.1 work包
- 基于JCA WorkManager工具的调度便利类,在ResourceAdapters中受支持。
- 1、DelegatingWork:Work适配器;
- 2、SimpleTaskWorkManager:WorkManager任务管理的实现类;
- 3、WorkManagerTaskExecutor:利用 Spring的SchedulingTaskExecutor或 利用SimpleTaskWorkManager 执行任务。
1.2.2 support包
- 为Spring中的JCA使用提供通用支持类,主要用于本地设置JCA ResourceAdapter或ConnectionFactory。
- 1、LocalConnectionFactoryBean:本地JCA连接工厂。
- 2、ResourceAdapterFactoryBean:JCA的资源适配器,从本地BootstrapContext开始,并将其公开给bean引用。
- 3、SimpleBootstrapContext:委托给给定的WorkManager和XATerminator(如果有)。创建简单的Timer本地实例。
1.2.3 endpoint包
不知道这个包有啥用。
- AbstractMessageEndpointFactory:JCA 1.7 MessageEndpointFactory接口的 抽象实现基础类,提供事务管理功能以及端点调用的类加载器暴露功能。
- 子类:GenericMessageEndpointFactory
- 为任何类型的消息侦听器对象(例如: javax.jms.MessageListener对象或javax.resource.cci.MessageListener对象)提供事务管理功能。
- 子类:GenericMessageEndpointFactory
- GenericMessageEndpointManager:
- 看 类的注释吧,不知道应用场景。
1.2.4 context包
集成包,允许将Spring应用程序上下文部署为符合JCA 1.7的RAR文件。
不知道咋用的,有会的,欢迎留言交流。
- BootstrapContextAware:接口,该接口由任何希望收到其运行的BootstrapContext(通常由ResourceAdapterApplicationContext确定)通知的对象实现。
- BootstrapContextAwareProcessor:将BootstrapContext传递给实现BootstrapContextAware接口的bean的 bean处理器实现。
- ResourceAdapterApplicationContext:JCA ResourceAdapter的ApplicationContext实现。需要使用JCA BootstrapContext初始化,将其传递给实现BootstrapContextAware的Spring托管bean。
- SpringContextResourceAdapter:加载Spring ApplicationContext的JCA 1.7 ResourceAdapter实现。作为ResourceAdapter生命周期的一部分启动和停止Spring管理的bean。
1.2.5 cci包
该包是 jca
包的核心包。
1.5.5.1 object 包
该包中的类将EIS操作表示为线程安全的可重用对象。
这种较高级别的CCI抽象取决于 org.springframework.jca.cci.core包中 较低级别的抽象。
与org.springframework.dao包中引发的异常相同,这意味着使用此包的代码不需要担心错误处理。
- EisOperation:使用CCI API的EIS操作对象的基类。封装CCI连接工厂和CCI交互规范。
- 子类:
- 1、SimpleRecordOperation:EIS操作对象,接受传入的CCI输入记录并返回相应的CCI输出记录。
- 2、MappingRecordOperation:EIS操作对象,需要映射的输入和输出对象,在CCI记录之间进行转换。
- 子类:
- MappingCommAreaOperation:用于访问COMMAREA记录的EIS操作对象。泛型MappingRecordOperation类的子类。
- 子类:
- 子类:
1.5.5.2 core包
-
1、support包
- 支持 org.springframework.jca.cci.core 的核心包。包含用于CciTemplate使用的DAO基类。
- 1、CciDaoSupport:方便的超类,用于基于CCI的数据访问对象。
- 2、CommAreaRecord:保存字节数组的 COMMAREA 的CCI记录实现。
-
2、该core包 基于CciTemplate及其相关回调接口,提供核心JCA CCI支持。
-
①、RecordCreator:用于在CciTemplate中创建输入记录。
-
②、RecordExtractor:结果 提取器
-
③、ConnectionCallback:用于在CCI连接上操作的代码的通用回调接口。允许使用任何类型和数量的交互在单个连接上执行任意数量的操作
InteractionCallback:用户在回调是,可以交互,交互他喵的什么,不知道 -_-
-
④、CciOperations:指定EIS上一组基本CCI操作的接口。由CciTemplate实现。不经常使用,但这是增强可测试性的有用选项,因为它很容易被模仿或存根。
- 子类实现:
- CciTemplate:这是CCI核心包中的核心类;执行核心CCI工作流,留下应用程序代码为CCI提供参数并提取结果。
- 子类实现:
-
1.5.5.3 connection包
提供了一个实用程序类,用于轻松访问ConnectionFactory,一个用于本地CCI事务的PlatformTransactionManager,以及各种简单的ConnectionFactory代理/适配器。
- 1、提供了一个实用程序类,用于轻松访问ConnectionFactory:ConnectionFactoryUtils
- 2、一个用于本地CCI事务的PlatformTransactionManager:CciLocalTransactionManager
- 3、各种简单的ConnectionFactory代理/适配器:
- ①、DelegatingConnectionFactory:ConnectionFactory的子类;
- 子类:
- Ⅰ、适配器:ConnectionSpecConnectionFactoryAdapter
- Ⅱ、代理:TransactionAwareConnectionFactoryProxy
- Ⅲ、SingleConnectionFactory:此工厂通过给定的目标ConnectionFactory以懒加载方式创建连接。
- 子类:
- ②、NotSupportedRecordFactory:用作RecordFactory参数的占位符(例如:由RecordCreator回调定义)。
- ①、DelegatingConnectionFactory:ConnectionFactory的子类;
- 4、ConnectionHolder:资源持有者包装CCI连接。CciLocalTransactionManager为给定的ConnectionFactory实例绑定到线程。
二、核心包(transaction)
2.1 外面的一些接口介绍
2.1.1 异常
TransactionException:所有事务异常的超类(这个超类也是最终继承的还是 RuntimeException,这就是为什么spring事务只能处理运行时异常的原因)
-
1、CannotCreateTransactionException:当无法使用底层事务API(如JTA)创建事务时引发异常。
-
①、NestedTransactionNotSupportedException:尝试处理嵌套事务时引发异常,但底层后端不支持嵌套事务。
-
②、TransactionSuspensionNotSupportedException:尝试挂起现有事务时引发异常,但底层后端不支持事务挂起。
-
-
2、HeuristicCompletionException:启发式完成事务的结果状态的值。
-
3、TransactionUsageException:由Spring事务API的不当使用引起的异常的超类。
-
①、IllegalTransactionStateException:根据应用的事务传播行为,当事务的存在或不存在达到非法状态时引发异常。
-
②、InvalidIsolationLevelException:当指定了无效的隔离级别(即事务管理器实现不支持的隔离级别)时引发的异常。
-
③、InvalidTimeoutException:指定无效超时时引发的异常,即指定的有效超时超出范围或事务管理器实现不支持超时。
-
④、NoTransactionException:当尝试依赖现有事务(例如:设置回滚状态)且不存在现有事务的操作时引发异常。这表示非法使用事务API。
-
-
4、TransactionSystemException:当遇到一般事务系统错误(如提交或回滚时)时引发异常。
-
5、UnexpectedRollbackException:当尝试提交事务导致意外回滚时引发。
-
6、TransactionTimedOutException:在给的时间内事务没有执行完成,抛出的异常。
2.1.2 事务管理器
-
PlatformTransactionManager:事务管理器接口
-
(1) 就只有3个方法;getTransaction() 、 commit() 、 rollback()
-
(2) 有两个实现类:
- AbstractPlatformTransactionManager: 基础抽象类,提供了事务管理的各种属性,方法,模板方法(供子类去实现)
- ResourceTransactionManager:AbstractPlatformTransactionManager的扩展;只有一个方法getResourceFactory();向客户端提示他们得到了什么类型的事务管理器,以及事务管理器操作的具体资源。
-
(3) 下面这5个是 既继承 AbstractPlatformTransactionManager 又实现ResourceTransactionManager 的子类:
-
① CciLocalTransactionManager:
CCI (Common Client Interface)是应用程序用来与连接器交互并与EIS通信的接口。
同样还为本地事务划界提供了API。
Spring对CCI的支持,目的是为了提供以典型的Spring方式来访问CCI连接器的类,并有效地使用Spring的通用资源和事务管理工具。
-
② JmsTransactionManager : MQ 远程访问这些。
-
③ JpaTransactionManager :Java标展下的XA分布式事务实现 的管理器
-
作用:
-
(JPA是Java Persistence API的简称,中文名Java持久层API)
-
位于org.springframework.orm.jpa包中,提供对单个javax.persistence.EntityManagerFactory事务支持,用于集成JPA实现框架时的事务管理。
-
两个子类:
-
WebLogicJtaTransactionManager:
位于org.springframework.transaction.jta包中,Spring提供的对WebSphere 6.0+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持;
-
WebSphereUowTransactionManager
位于org.springframework.transaction.jta包中,Spring提供的对WebLogic 8.1+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持。
-
-
-
★ ④ DataSourceTransactionManager
位于org.springframework.jdbc.datasource包中,数据源事务管理器,提供对单个javax.sql.DataSource事务管理,
用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事务管理;
-
⑤ HibernateTransactionManager
位于org.springframework.orm.hibernate3包中,提供对单个org.hibernate.SessionFactory事务支持,
用于集成Hibernate框架时的事务管理;
该事务管理器只支持Hibernate3+版本,且Spring3.0+版本只支持Hibernate 3.2+版本。
-
-
-
下面继续按边缘包(event,jta)和核心包(support,interceptor,config,annotation)介绍。
2.2 包介绍
2.2.1 event包
事务事件监听器。
- TransactionPhase:
- 事务事件监听器可以监听的阶段枚举类;
- 1、BEFORE_COMMIT 在事务提交之前触发事件
- 2、AFTER_COMMIT 在事务提交成功完成后触发事件
- 3、AFTER_ROLLBACK 如果事务已回滚,则触发事件
- 4、AFTER_COMPLETION 在事务完成后触发事件
- 事务事件监听器可以监听的阶段枚举类;
- TransactionalEventListenerFactory:
- EventListenerFactory的实现类;处理 被@TransactionalEventListener注解标注的方法
- @TransactionalEventListener :事务事件监听注解
- ApplicationListenerMethodTransactionalAdapter:事务方法监听器的适配器
该 事务事件监听器的应用,可以看下面的demo:
a-transactional-learning/src/main/java/com/transactional/eventlistener/TransactionalEventListenerConfig.java
在本人上面说的 spring 源码工程的 a-transactional-learning 项目中。
2.2.2 jta包
这里引用:blog.csdn.net/peterwangha… 对于 JTA的介绍。
Java Transaction API,通常称为JTA,是用于管理 Java中的事务的API 。它允许我们以资源无关的方式启动,提交和回滚事务。
根据用于管理事务的底层实现,Spring中的事务策略可以分为两个主要部分:
单连接器策略(相当于本地事务管理器):
底层技术使用单连接器。例如,JDBC使用连接级事务、Hibernate以及JDO使用会话级事务。可以应用使用AOP和拦截器的声明式事务管理。
多连接器策略(相当于全局事务管理器):
底层技术具有使用多个连接器的能力。当有这方面需求时,JTA是最好的选择。此策略需要启用JTA的数据源实例。JBossTS、Atomikos、Bitronix都是开源的JTA实现。
JTA的真正强大之处在于它能够在单个事务中管理多个资源(如数据库,消息服务)。
-
JTA类型的事务管理器创建工厂
-
TransactionFactory:用于根据指定的事务特征创建JTA事务对象的策略接口
-
①、SimpleTransactionFactory:TransactionFactory策略接口的默认实现,只需包装一个标准的JTA Transaction
-
②、JtaTransactionManager
-
该类的大致作用是:
Java处理分布式事务的API;因为:对于单个JDBC数据源,DataSourceTransactionManager完全足够;
对于使用Hibernate(包括事务缓存)访问单个资源,HibernateTransactionManager是合适的。
-
子类:
- Ⅰ、WebLogicJtaTransactionManager
- Ⅱ、WebSphereUowTransactionManager
-
-
介绍一下啥是WebLogic,WebSphere主要我自己不知道 -_- :
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
WebSphere是IBM的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的软件。
WebSphere Application Server 是该设施的基础,其他所有产品都在它之上运行。WebSphere Process Server 基于 WebSphere Application Server 和 WebSphere Enterprise Service Bus,它为面向服务的体系结构 (SOA) 的模块化应用程序提供了基础,并支持应用业务规则,以驱动支持业务流程的应用程序。高性能环境还使用 WebSphere Extended Deployment 作为其基础设施的一部分。其他 WebSphere 产品提供了广泛的其他服务。
WebSphere 是一个模块化的平台,基于业界支持的开放标准。可以通过受信任和持久的接口,将现有资产插入 WebSphere,可以继续扩展环境。WebSphere可以在许多平台上运行,包括 Intel、Linux 和 z/OS。
2.2.3 support包
2.2.3.1 资源持有者
-
ResourceHolder:由资源持有者实现的通用接口。允许Spring的事务基础架构在必要时对持有人进行内省和重置。
-
ResourceHolderSupport:
为资源持有者提供方便的基类。功能仅支持参与事务的回滚。可以在特定的秒数或毫秒数后过期,以确定事务超时。
子类实现:(其实就是事务需要的资源类型)
- 1、ConnectionHolder (org.springframework.jca.cci.connection.ConnectionHolder):资源持有者包装CCI连接;
- 2、ConnectionHolder (org.springframework.jdbc.datasource.ConnectionHolder):资源持有者包装JDBC连接;
- 3、EntityManagerHolder (org.springframework.orm.jpa.EntityManagerHolder):资源持有者包装JPA EntityManager;
- 4、JmsResourceHolder (org.springframework.jms.connection.JmsResourceHolder):资源持有者包装JMS连接和JMS会话;
- 5、SessionHolder (org.springframework.orm.hibernate5.SessionHolder):资源持有者包装Hibernate会话(加上可选事务)。
-
ResourceHolderSynchronization:
(当前工程包中:org.springframework.transaction.support.ResourceHolderSynchronization)
资源持有者事务同步器;
注意这是一个抽象类,子类就是对应了各种资源,也即:子类实现就是对应资源的同步器了。
- Ⅰ、ConnectionSynchronization (org.springframework.jca.cci.connection.ConnectionFactoryUtils.ConnectionSynchronization):数据库连接资源同步器;
- Ⅱ、JmsResourceSynchronization (spring-jms工程中:org.springframework.jms.connection.ConnectionFactoryUtils.JmsResourceSynchronization):Jms资源同步器
- Ⅲ、等等。。。
2.2.3.2 事务资源管理器
-
AbstractPlatformTransactionManager:
- 作为事务管理器的抽象基类;实现Spring的标准事务工作流,作为 JtaTransactionManager等具体平台事务管理器的基础。
- 此基类提供以下工作流处理:
- 1、确定是否存在现有交易;
- 2、应用适当的传播行为;
- 3、必要时暂停并恢复交易;
- 4、在提交时检查仅回滚标志;
- 5、对回滚应用适当的修改(仅限实际回滚或设置回滚);
- 6、触发已注册的同步回调(如果事务同步处于活动状态)。
-
ResourceTransactionManager:事务资源管理器接口;该接口只有一个方法,获取对应事务管理器的 事务资源。
-
子类就是对应各种类中的事务管理器:
- 1、CciLocalTransactionManager:(org.springframework.jca.cci.connection.CciLocalTransactionManager)
- 2、DataSourceTransactionManager:(org.springframework.jdbc.datasource.DataSourceTransactionManager)
- 3、HibernateTransactionManager:(org.springframework.orm.hibernate5.HibernateTransactionManager)
- 4、JmsTransactionManager:(org.springframework.jms.connection.JmsTransactionManager)
- 5、JpaTransactionManager:(org.springframework.orm.jpa.JpaTransactionManager)
2.2.3.3 事务状态
主要就是封装了事务状态,如:是否回滚,超时,只读,是否是新开启的事务,是否存在保存点等信息;
当前包中只有三个具体的实现(AbstractTransactionStatus,DefaultTransactionStatus,SimpleTransactionStatus),我们要往上追溯。
-
1、SavepointManager
事务保存点管理器接口;
该接口指定API以通用的编程方式管理事务保存点。由TransactionStatus扩展以公开特定事务的保存点管理功能。
-
2、TransactionStatus:
-
①、对 SavepointManager的扩展;
-
②、子类:AbstractTransactionStatus 作为事务状态的一个抽闲基类,提供一些基础方法;
-
两个子类实现:
-
Ⅰ、DefaultTransactionStatus 默认实现;
基于底层"事务对象"的概念;
保存AbstractPlatformTransactionManager内部需要的所有状态信息,包括由具体事务管理器实现确定的通用事务对象。
-
Ⅱ、SimpleTransactionStatus
简单实现;派生自AbstractTransactionStatus并添加显式的"newTransaction"标志。
-
-
2.2.3.4 事务属性
-
TransactionDefinition:
-
事务属性接口;如:隔离级别,传播行为,超时,只读属性。
-
子类:
-
1、DefaultTransactionDefinition
默认实现;对应某一个事务所拥有的事务属性信息。
-
2、DelegatingTransactionDefinition:事务属性的 委托实现类。
-
这里放上 2.2.3.3 事务状态、2.2.3.4 事务属性两小节类的关系图:
事务的属性信息UML图;下面梳理一下该关系图:
-
TransactionDefinition:定义事务属性常量,如:隔离级别,传播行为,超时的常量定义。
-
DefaultTransactionDefinition:子类默认实现,这个才是作为一个 对象,记录当前事务的属性信息的一个实体类(事务源);
-
TransactionAttribute:继承了TransactionDefinition,该接口新增 定义 rollback回滚规范;
- DefaultTransactionAttribute:继承了 DefaultTransactionDefinition (也就说继承了DefaultTransactionDefinition 作为事务属性的实体);并且实现了 TransactionAttribute 接口(也就要去定义回滚的规范);
- RuleBasedTransactionAttribute:继承了DefaultTransactionAttribute,也就是(DefaultTransactionDefinition 和 TransactionAttribute 对于事务的属性定义、回滚规范都有了,但该类具体还是对 回滚规范粒度降低:通过应用大量回滚规则(正负规则),计算给定异常是否应导致事务回滚。)
- DefaultTransactionAttribute:继承了 DefaultTransactionDefinition (也就说继承了DefaultTransactionDefinition 作为事务属性的实体);并且实现了 TransactionAttribute 接口(也就要去定义回滚的规范);
-
2.3.3.5 事务同步器
-
1、TransactionSynchronization 事务同步器
事务同步器接口;所谓事务同步回调接口;就是说:
下面的 beforeCommit,beforeCompletion,afterCommit,afterCompletion这些方法可以在事务的对应阶段,预留回调接口,就是所谓的钩子方法,去做一些前置处理,后置处理等。
-
2、TransactionSynchronizationAdapter 事务同步器的适配器
就是上面 TransactionSynchronization的适配器,子类实现该接口,来适配TransactionSynchronization.
-
3、介绍一些 事务同步器的一些子类:
-
如:
- ①、TransactionAwareCacheDecorator
(在spring-context-support工程中:org.springframework.cache.transaction.TransactionAwareCacheDecorator)
该类是一个 事务缓存同步器
该类还是一个装饰器;缓存装饰器,将目标类装饰缓存;
我们看如何 适配事务同步器。
可以看:put(),evict(),clear()方法里面 对TransactionSynchronizationAdapter里面的afterCommit,afterCompletion等这些方法的重写。
-
②、ResourceHolderSynchronization
(当前工程包中:org.springframework.transaction.support.ResourceHolderSynchronization)
资源持有者事务同步器;
注意这是一个抽象类,子类就是对应了各种资源,也即:子类实现就是对应资源的同步器了。
-
Ⅰ、ConnectionSynchronization
(org.springframework.jca.cci.connection.ConnectionFactoryUtils.ConnectionSynchronization) 数据库连接资源同步器
-
Ⅱ、JmsResourceSynchronization
spring-jms工程中:org.springframework.jms.connection.ConnectionFactoryUtils.JmsResourceSynchronization) Jms资源同步器
-
Ⅲ、等等。。。
-
-
③、等等。。。
-
-
4、TransactionSynchronizationUtils
事务同步器的工具类;
用于在所有当前注册的同步上「触发」特定TransactionSynchronization回调方法的实用程序方法。
在该类中我们看到一些,触发同步的方法:triggerFlush()、triggerBeforeCompletion()、triggerAfterCommit()等等。
-
5、TransactionSynchronizationManager
事务同步器的管理器;
该类里面有一些事务的属性,记录了事务状态,为我们事务执行一些 上面的同步操作提供了基础。
-
6、SimpleTransactionScope
一个简单的事务支持的作用域实现; 为什么放在这里呢?因为,该类就是将事务资源包装成 具有作用域 特性的类。
2.3.3.6 其他类
-
其他类:
- 1、SmartTransactionObject:该类仅仅是 返回事务的回滚标志。
- 2、TransactionCallback:事务代码的回调接口。
- 3、TransactionCallbackWithoutResult:TransactionCallback的实现。
-
TransactionTemplate:简化 编程事务划分和事务异常处理的模板类。
-
TransactionOperations:TransactionTemplate的接口。
2.2.4 interceptor 包 ★
2.2.4.1 事务拦截器相关
-
1、TransactionInterceptor 事务拦截器 ★★★★★
内部方法 TransactionInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
就是执行事务的入口。
-
2、TransactionProxyFactoryBean
用于简化声明性事务处理的代理工厂bean。
-
3、BeanFactoryTransactionAttributeSourceAdvisor
由TransactionAttributeSource驱动的Advisor,用于包含事务性方法的事务通知bean。
-
4、TransactionalProxy
用于手动创建事务代理的标记接口;仅仅是一个标志。
-
5、TransactionAspectSupport ★★★★★
事务切面的基类;提供了 调用事务,获取事务管理器 等核心方法;以及主要的事务处理核心逻辑。
-
增强器、编辑器、切入点包装事务:
- 1、TransactionAttributeSourceAdvisor:事务增强器
- 2、TransactionAttributeSourceEditor:
- 事务属性编辑器;具体可以查看该类的中 setAsText()查看该类作用。
- 3、TransactionAttributeSourcePointcut:事务切入点。
2.2.4.2 事务属性源
事务属性源:目的为了获取事务的属性信息;即获取的类型就是上面的:TransactionAttribute
-
TransactionAttributeSource:事务属性源接口
- 1、MatchAlwaysTransactionAttributeSource
该类可以使得:事务拦截器处理的所有方法使用相同的事务属性
-
2、MethodMapTransactionAttributeSource
简单的TransactionAttributeSource实现,允许将每个方法的属性存储在映射中
-
3、NameMatchTransactionAttributeSource
简单的TransactionAttributeSource实现,允许通过注册名称匹配属性。
-
4、CompositeTransactionAttributeSource
组合事务属性;可以查看 getTransactionAttribute()方法;该方法就是获取 1、2、3对应的事务源属性类
-
5、AbstractFallbackTransactionAttributeSource ★★★
缓存方法的属性并实现回退策略。
-
该类下面有一个重要的子类:
AnnotationTransactionAttributeSource:记录的注解方式事务的属性信息。(在org.springframework.transaction.annotation包中)
-
事务的属性:
- 1、TransactionDefinition:事务的传播行为、及属性接口;
- 2、TransactionAttribute:该接口继承了 TransactionDefinition 新增了
- getQualifier() 方法: 获取事务属性,如:隔离级别,传播行为...
- rollbackOn() 方法:判断事务是否需要回滚
- 3、DefaultTransactionAttribute
- 默认的事务属性实现类;
- 该类只有两个属性:
- ①、qualifier 事务的属性信息,隔离级别,传播行为等...
- ②、descriptor 事务的全称限定名
- 子类:
- ①、RuleBasedTransactionAttribute:事务的 回滚规则属性类;
- ②、Ejb3TransactionAttribute:Ejb3TransactionAnnotationParser里面的一个内部类)
RollbackRuleAttribute:
- 确定给定异常(以及任何子类)是否应导致回滚的规则。
- 子类:
- NoRollbackRuleAttribute:RollbackRuleAttribute的标记子类,其行为与RollbackRuleAttribute超类相反。
2.2.5 annotation包 ★
-
两个注解:
-
@EnableTransactionManagement :启用Spring的注解方式驱动事务管理功能,类似于Spring的XML命名空间中的支持。
-
@Transactional :描述单个方法或类上的事务属性。在类级别,此注解作为默认值应用于声明类及其子类的所有方法。
-
-
两个事务属性:
-
1、Isolation 事务隔离级别
-
2、Propagation 事务的传播行为
-
-
事务注解 解析器:
- 1、TransactionAnnotationParser:用于解析已知事务注解类型的策略接口
- 2、下面三个子类实现:
- ①、SpringTransactionAnnotationParser Spring自己的事务
- ②、Ejb3TransactionAnnotationParser JTA 1.2的事务
- ③、JtaTransactionAnnotationParser EJB3的事务
- 2、下面三个子类实现:
- 1、TransactionAnnotationParser:用于解析已知事务注解类型的策略接口
-
TransactionManagementConfigurer:
事务管理器配置接口;
具体的用法可以进入该类查看注释;
demo: com.transactional.annotation.config.DataSourceConfig#transactionManager()
-
AbstractTransactionManagementConfiguration
-
事务管理器配置类的抽象类;
-
下面有两个子类实现:
-
1、ProxyTransactionManagementConfiguration (在当前包中)
基于代理的 注解驱动事务管理所需的Spring基础结构bean的配置类。
-
2、AspectJTransactionManagementConfiguration
(在 spring-aspects 工程中 org.springframework.transaction.aspectj.AspectJTransactionManagementConfiguration)
基于AspectJ 的注解驱动事务管理所需的Spring基础结构bean的配置类。
-
-
-
TransactionManagementConfigurationSelector
根据@EnableTransactionManagement的值选择应使用哪个AbstractTransactionManagementConfiguration实现。
就是看是基于 代理方式,还是基于AspectJ方式。
-
AnnotationTransactionAttributeSource
- 事务注解的元数据。
- 里面就有基于策略方式实现 对TransactionAnnotationParser事务注解解析器的选择。
2.2.6 config ★
-
TxNamespaceHandler:事务的 XML配置文件方式 结点解析器的注册入口。
-
下面是三个解析器:
-
1、TxAdviceBeanDefinitionParser:解析
<tx:advice/>
标签 -
2、JtaTransactionManagerBeanDefinitionParser:解析
<tx:jta-transaction-manager/>
标签 -
3、AnnotationDrivenBeanDefinitionParser:解析
<tx:annotation-driven transaction-manager="transactionManager"/>
-
-
TransactionManagementConfigUtils:用于跨子包内部共享的配置常量
-
JtaTransactionManagerFactoryBean:相当于
<tx:jta-transaction-manager/>
元素的FactoryBean,自动检测WebLogic和WebSphere服务器,并公开相应的JtaTransactionManager子类。
转载自:https://juejin.cn/post/7389259362719449140