理解 Spring Framework 的宣告式事務實現
僅僅告訴你用 @Transactional
註解你的類,在你的配置中新增 @EnableTransactionManagement
,然後期望你理解這一切是如何工作的,這是不夠的。為了提供更深入的理解,本節將在事務相關問題的背景下解釋 Spring Framework 宣告式事務基礎設施的內部工作原理。
關於 Spring Framework 宣告式事務支援,最重要的概念是:這種支援是透過 AOP 代理啟用的,並且事務通知是由元資料(目前是基於 XML 或註解)驅動的。AOP 與事務元資料的結合會生成一個 AOP 代理,該代理會結合適當的 TransactionManager
實現,使用 TransactionInterceptor
來驅動方法呼叫周圍的事務。
Spring AOP 在AOP 部分中進行了介紹。 |
Spring Framework 的 TransactionInterceptor
為命令式和響應式程式設計模型提供事務管理。攔截器透過檢查方法的返回型別來檢測所需的事務管理型別。返回響應式型別(例如 Publisher
或 Kotlin Flow
,或其子型別)的方法符合響應式事務管理條件。包括 void
在內的所有其他返回型別都使用命令式事務管理的執行路徑。
不同的事務管理型別影響所需的事務管理器。命令式事務需要 PlatformTransactionManager
,而響應式事務使用 ReactiveTransactionManager
實現。
由 當配置了 |
下圖顯示了呼叫事務代理上方法的概念檢視
