spring-tx核心接口

spring-tx,即Spring Framework的事务管理模块,提供了对各种事务API的抽象,包括JDBC、JPA、Hibernate等。Spring事务管理的核心是PlatformTransactionManager接口,它为应用程序提供了统一的事务管理方式,无论是声明式还是编程式事务管理。

以下是spring-tx源码中的一些重点概念和组件:

PlatformTransactionManager

PlatformTransactionManager是Spring事务管理的核心接口,它定义了开始、提交、回滚事务的基本操作。具体实现类负责与不同的事务API进行交互。

  • TransactionStatus getTransaction(TransactionDefinition definition)
  • void commit(TransactionStatus status)
  • void rollback(TransactionStatus status)

TransactionDefinition

TransactionDefinition接口定义了事务的属性,如传播行为、隔离级别、超时时间和只读标志等。

  • PROPAGATION_REQUIRED默认传播行文
  • ISOLATION_DEFAULT默认隔离级别
  • TIMEOUT_DEFAULT默认超时

TransactionStatus

TransactionStatus接口提供了关于当前事务状态的信息,如是否新事务、是否已提交或回滚等。getTransactionName

  • hasTransaction
  • isNewTransaction
  • isNested
  • isReadOnly
  • setRollbackOnly
  • isRollbackOnly
  • isCompleted

TransactionInterceptor

TransactionInterceptor是Spring AOP中用于事务管理的切面。它通过TransactionAttributeSource获取事务属性,并通过PlatformTransactionManager管理事务的生命周期。

  • 构造TransactionInterceptor时需要传递PlatformTransactionManager入参,构造器包括:TransactionInterceptor(PlatformTransactionManager ptm, TransactionAttributeSource tas)与TransactionInterceptor(TransactionManager ptm, TransactionAttributeSource tas)两种
  • 实现了MethodInterceptor接口,MethodInterceptor在cglib动态代理时使用;

TransactionAttributeSource

TransactionAttributeSource用于决定方法调用上的事务属性。通常与@Transactional注解一起工作,根据方法签名来决定事务属性。

TransactionAspectSupport

TransactionAspectSupport是一个工具类,用于在AOP切面中支持事务管理,它包含了事务的开始、提交和回滚的逻辑。

DataSourceTransactionManager

DataSourceTransactionManagerPlatformTransactionManager的一个具体实现,用于基于DataSource的事务管理,如JDBC和JPA。

JpaTransactionManager

JpaTransactionManager是另一个PlatformTransactionManager的实现,专门用于JPA事务管理。

HibernateTransactionManager

HibernateTransactionManager用于管理Hibernate的事务,它也是PlatformTransactionManager的一个实现。

事务传播行为

事务传播行为定义了方法调用中事务应该如何交互。Spring支持七种传播行为,包括REQUIREDSUPPORTSMANDATORYREQUIRES_NEWNOT_SUPPORTEDNEVERNESTED

源码中的关键流程

  1. 事务配置解析:Spring通过TxNamespaceHandlerTxAdviceBeanDefinitionParser解析XML或注解中的事务配置,生成TransactionInterceptor的定义。

  2. 事务拦截器:当有方法调用时,AOP会拦截方法调用,通过TransactionInterceptor决定是否需要开启事务,以及事务的属性。

  3. 事务开始和结束:TransactionInterceptor调用PlatformTransactionManagergetTransaction方法开始事务,然后在方法正常结束或抛出异常时调用commitrollback方法。

  4. 异常处理:Spring事务管理支持特定的异常回滚规则,可以通过TransactionAttributerollbackOn属性来指定。

posted @ 2024-07-02 02:11  使用D  阅读(4)  评论(0编辑  收藏  举报