在Spring MVC Controller中注入HttpServletRequest對象會不會造成線程安全的問題


做法:

1、比如我們在Controller的方法中,通常是直接將HttpServletRequest做為參數,而為了方便節省代碼,通常會定義為全局變量,然后使用@Autowire注入。

說明:

1、觀察了網上的說法,好像沒有統一的解釋,有些說會線程安全,有些則說不會。

2、如果按照一些方法進行測試,好像也會出現,而換另一種方法測試,好像也不會出現。

3、可能和Spring的版本有關,導致測試的結果不一樣。

4、也有可能方法不對,導致測試結果不一致。

綜上結論:

1、如果是最新版本經過嚴格測試后,不會導致線程安全的問題,那么可以使用。

2、如果Controller默認為單例,那么可以將注入的HttpServletRequest對象不要設置成單例,每次都創建一個,比如@Scope("prototype"),但這樣也就放棄了單例的有點。

3、(推薦)按照官方的寫法,其實這種做法是不太標准的,如果是規范的做法,那么就在方法的參數上進行使用,安全且符合標准。

簡單的測試分析:

 

 

參考:

http://blog.csdn.net/albertfly/article/details/52680274

https://segmentfault.com/q/1010000005139036?_ea=803262

https://www.cnblogs.com/abcwt112/p/7777258.html

https://my.oschina.net/sluggarddd/blog/678603?fromerr=XhvpvVTi

http://www.xuebuyuan.com/1628190.html

https://www.cnblogs.com/springsource/p/6728292.html

http://blog.csdn.net/xuexuan_050848/article/details/53843955


免責聲明!

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



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