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