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