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