1. 程式人生 > >Spring MVC Controller執行緒安全性問題

Spring MVC Controller執行緒安全性問題

Spring MVC預設是單例模式,Controller、Service、Dao都是單例所以在使用不當存在一定的安全隱患。Controller單例模式的好處在與:
1. 提高效能,不用每次建立Controller例項,減少了物件建立和垃圾收集的時間
2. 沒多例的必要
由於只有一個Controller的例項,當多個執行緒同時呼叫它的時候,它的成員變數就不是執行緒安全的。
當然在大多數情況下,我們根本不需要Controller考慮執行緒安全的問題,除非在類中聲明瞭成員變數。因此Spring MVC的Contrller在編碼時,儘量避免使用例項變數。如果一定要使用例項變數,則可以改用以下方式:
1. Controller中宣告 scope=”prototype”,即設定為多例模式
2.在Controller中使用ThreadLocal變數,如:private ThreadLocal<Integer> count = new ThreadLocal<Integer>();