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