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