在SpringMVCController中注入HttpServletRequest物件會不會造成執行緒安全的問題

easonjim發表於2017-12-22

做法:

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

==>如有問題,請聯絡我:easonjim#163.com,或者下方發表評論。<==


相關文章