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