理解Spring框架的声明式事务实现
仅仅告诉你在类上加上@Transactional
注解,将@EnableTransactionManagement
添加到配置中,并期望你理解所有工作原理是不够的。为了提供更深入的理解,本节将在事务相关问题的背景下解释Spring框架的声明式事务基础设施的内部工作原理。
关于Spring框架的声明式事务支持,最重要的概念是,这种支持是通过AOP代理启用的,事务建议是由元数据(目前基于XML或注解)驱动的。AOP与事务元数据的结合产生了一个使用TransactionInterceptor
和适当的TransactionManager
实现来驱动方法调用周围事务的AOP代理。
Spring AOP在AOP部分中有介绍。 |
Spring框架的TransactionInterceptor
为命令式和响应式编程模型提供事务管理。该拦截器通过检查方法返回类型来检测所需的事务管理方式。返回响应式类型(如Publisher
或Kotlin的Flow
,或这些类型的子类型)的方法符合响应式事务管理的条件。所有其他返回类型,包括void
,使用命令式事务管理的代码路径。
事务管理方式会影响所需的事务管理器。命令式事务需要一个PlatformTransactionManager
,而响应式事务使用ReactiveTransactionManager
实现。
当配置了 |
以下图片展示了在事务代理上调用方法的概念视图:
![tx](https://docs.spring.io/spring-framework/reference/_images/tx.png)