spring動態代理與事務


(#)背景:來說一下具體的問題,業務上產品的意思是,處理這個請求不能用太多時間否則,用戶就會再次觸發這個請求。。。。如果采取正常的處理方式,一次沒有處理完成,

用戶再次點擊,還是沒反應,再點,,,,,,可能會造成雪崩,所以沒辦法,只能實現一個異步的處理流程,假裝處理完了,給用戶一個反饋,實際上就是給service實現一個Runanble接口,然后提交給線程池就完了,這個過程有一個坑.

(#)坑一:如果在spirng中我們不配置代理,會使用jdk代理,如果熟悉jdk代理的,可能都知道jdk代理只能針對接口進行代理,由於實現了Runnable接口,那么只能代理

這個runnable。。。。,所以下面在你獲取這個bean實例的時候,在進行轉型的時候,一定會拋出proxy63()$......一堆代理的錯誤,遇到這個問題其實主要是想明白原理

解決起來很簡單,直接使用cglib代理就可以了,因為cglib代理針對的是方法而不是接口.

(#)坑二(描述):spring對於事務的處理也是建立在代理的基礎上,所以會出現一個問題,就是一個類A中有a,b兩個方法,b方法是一個事務的,如果B類調用A類的b方法是可以保證事務的,因為這個可以代理,但是如果A類的a方法調用b方法,這個事務就保證不了了,因為代理的是a方法,而事務是加在b方法上的

1.可以在a方法上加上事務

2.可以在a方法中調用b方法之前動態的指定,強制代理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM