1. 程式人生 > >轉發:分析動態代理給Spring事務埋下的坑

轉發:分析動態代理給Spring事務埋下的坑

一個有事務的方法,去呼叫另一個有事務的方法,會怎麼樣?

一個沒有事務的方法,去呼叫一個有事務的方法,會怎麼樣?

事務方法之間的巢狀呼叫,普通方法和事務方法之間的巢狀呼叫,都不會開啟新的事務!

為什麼會這樣呢?

其實通過上面的動態代理的程式碼,你應該可以發現:

動態代理最終都是要呼叫原始物件的,而原始物件在去呼叫方法時,是不會再觸發代理了!

那麼如何解決呢?

很簡單,我們完全可以在抽出一個XxxService,在其內部呼叫UserService.txMethod()和UserService.txMethod2()方法即可。總而言之,避免在一個Service內部進行事務方法的巢狀呼叫!(因為動態代理導致這種場景事務失效了。)