理解 Spring Framework 的声明式事务实现
仅仅告诉你用 @Transactional
注解你的类,在你的配置中添加 @EnableTransactionManagement
,然后期望你理解这一切是如何工作的,这是不够的。为了提供更深入的理解,本节将在事务相关问题的背景下解释 Spring Framework 声明式事务基础设施的内部工作原理。
关于 Spring Framework 声明式事务支持,最重要的概念是:这种支持是通过 AOP 代理启用的,并且事务通知是由元数据(目前是基于 XML 或注解)驱动的。AOP 与事务元数据的结合会生成一个 AOP 代理,该代理会结合适当的 TransactionManager
实现,使用 TransactionInterceptor
来驱动方法调用周围的事务。
Spring AOP 在AOP 部分中进行了介绍。 |
Spring Framework 的 TransactionInterceptor
为命令式和响应式编程模型提供事务管理。拦截器通过检查方法的返回类型来检测所需的事务管理类型。返回响应式类型(例如 Publisher
或 Kotlin Flow
,或其子类型)的方法符合响应式事务管理条件。包括 void
在内的所有其他返回类型都使用命令式事务管理的执行路径。
不同的事务管理类型影响所需的事务管理器。命令式事务需要 PlatformTransactionManager
,而响应式事务使用 ReactiveTransactionManager
实现。
由 当配置了 |
下图显示了调用事务代理上方法的概念视图
