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
DataSourceTransactionManager是PlatformTransactionManager的一个具体实现,用于基于DataSource的事务管理,如JDBC和JPA。
JpaTransactionManager
JpaTransactionManager是另一个PlatformTransactionManager的实现,专门用于JPA事务管理。
HibernateTransactionManager
HibernateTransactionManager用于管理Hibernate的事务,它也是PlatformTransactionManager的一个实现。
事务传播行为
事务传播行为定义了方法调用中事务应该如何交互。Spring支持七种传播行为,包括REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED。
源码中的关键流程
-
事务配置解析:Spring通过
TxNamespaceHandler和TxAdviceBeanDefinitionParser解析XML或注解中的事务配置,生成TransactionInterceptor的定义。 -
事务拦截器:当有方法调用时,AOP会拦截方法调用,通过
TransactionInterceptor决定是否需要开启事务,以及事务的属性。 -
事务开始和结束:
TransactionInterceptor调用PlatformTransactionManager的getTransaction方法开始事务,然后在方法正常结束或抛出异常时调用commit或rollback方法。 -
异常处理:Spring事务管理支持特定的异常回滚规则,可以通过
TransactionAttribute的rollbackOn属性来指定。

浙公网安备 33010602011771号