了解 Spring Framework 的宣告式交易實作
僅僅告訴您使用 @Transactional
註解標註您的類別,並在您的組態中新增 @EnableTransactionManagement
,然後期望您了解其運作方式是不夠的。為了提供更深入的理解,本節將在與交易相關問題的背景下,說明 Spring Framework 宣告式交易基礎架構的內部運作方式。
關於 Spring Framework 的宣告式交易支援,最重要的概念是此支援透過 AOP 代理 啟用,並且交易建議由中繼資料(目前為 XML 或基於註解)驅動。AOP 與交易中繼資料的結合產生了一個 AOP 代理,該代理使用 TransactionInterceptor
以及適當的 TransactionManager
實作,來驅動方法調用周圍的交易。
Spring AOP 在 AOP 章節 中涵蓋。 |
Spring Framework 的 TransactionInterceptor
為命令式和反應式程式設計模型提供交易管理。攔截器透過檢查方法傳回類型來偵測所需的交易管理風格。傳回反應式類型(例如 Publisher
或 Kotlin Flow
(或其子類型))的方法符合反應式交易管理的資格。包括 void
在內的所有其他傳回類型都使用命令式交易管理的程式碼路徑。
交易管理風格會影響所需的交易管理器。命令式交易需要 PlatformTransactionManager
,而反應式交易則使用 ReactiveTransactionManager
實作。
由 當配置了 |
下圖顯示了在交易代理上呼叫方法的概念視圖
