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