|
对于最新稳定版本,请使用 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 的实现。
|
由 |
以下图片展示了调用事务代理对象的方法的概念视图: