揭開 Spring 的交易魔法
使用 @Transactional 註解方法會觸發 Spring 建立一個代理類別來攔截傳入的方法呼叫。它的運作原理如下:
代理類別的建立和結構
Spring 建立一個代理類,它實作與帶註解的類別相同的介面。代理類是動態產生的類,它包裝了原始類。在代理類別內部,Spring 注入程式碼來處理事務行為,例如管理事務的生命週期。
原始類別的實際實例不受影響。它保持不變,但對原始類別的方法呼叫被代理類別攔截。
代理類別的可見性
代理類別通常在運作時不可見。 Spring 透過代理透明地攔截方法調用,使得看起來好像正在調用原始類別。但是,您可以使用偵錯工具或 AOP 框架等工具來存取代理程式類別。
內部呼叫的交易範圍有限
Spring 的交易代理僅攔截來自以下位置的呼叫外部來源。在同一物件內進行的呼叫(也稱為「自調用」)不會被攔截。這是因為此類呼叫繞過了代理機制。
自呼叫解決方法
要啟用自呼叫方法的交易行為,您可以注入代理的實例使用 BeanFactoryPostProcessor 將類別轉換為自引用類別。這允許您透過代理直接進行內部調用,從而將事務範圍擴展到自調用方法。
以上是Spring的@Transactional註解如何管理事務和處理自呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!