likes
comments
collection
share

Spring 事务源码类功能介绍

作者站长头像
站长
· 阅读数 18

spring-tx工程中,总共有3个大包(package),我们先介绍边缘包(dao、jca),再介绍核心流程包(transaction)。

在介绍先,建议可以去博主的源码库中拉取源码,对于事务的每个包的 package.info都按类功能,包功能等做了总结。

还有,在我们不懂某一个类或者某个方法的功能时,我们一定要会单元测试,或者会去 源码工程中的test包找对应的测试类。

Spring 事务源码类功能介绍

一、边缘包

1.1 dao包

  • 1、这个包还是比较简单的,但是设计的时候不好考虑,因为对于各种异常捕获和处理是至关重要的!
  • 2、annotation包:其实就是针对Dao层异常转换处理。
  • 3、support包:对于各种类型Dao的适配支持
    • 比较重要的类:DaoSupport,子类实现:
      • 如:JdbcDaoSupport,JdoDaoSupport,HibernateDaoSupport

Spring 事务源码类功能介绍

1.2 jca包

Spring 事务源码类功能介绍

先对两个名称说明一下:

  • 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对象)提供事务管理功能。
  • 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回调定义)。
  • 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 事务属性两小节类的关系图:

Spring 事务源码类功能介绍

事务的属性信息UML图;下面梳理一下该关系图:

  • TransactionDefinition:定义事务属性常量,如:隔离级别,传播行为,超时的常量定义。

    • DefaultTransactionDefinition:子类默认实现,这个才是作为一个 对象,记录当前事务的属性信息的一个实体类(事务源);

    • TransactionAttribute:继承了TransactionDefinition,该接口新增 定义 rollback回滚规范;

      • DefaultTransactionAttribute:继承了 DefaultTransactionDefinition (也就说继承了DefaultTransactionDefinition 作为事务属性的实体);并且实现了 TransactionAttribute 接口(也就要去定义回滚的规范);
        • RuleBasedTransactionAttribute:继承了DefaultTransactionAttribute,也就是(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的事务
  • 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
评论
请登录