SpringMVC Controller單例陷阱

2021-07-28 14:04:14 字數 1177 閱讀 8974

使用

springmvc

有一段時間了

,之前一直使用

struts2,

在struts2

中action

都是原型

(prototype)

的, 說是因為執行緒安全問題,對於

springmvc

中bean

預設都是

(singleton)

單例的,

那麼用@controller

註解標籤注入的

controller

類是單例實現的?測試

結果發現

spring3

中的controller

預設是單例的,若是某個

controller

中有乙個私有的變數

i,所有請求到同乙個

controller

時,使用的

i變數是共用的,即若是某個請求中修改了這個變數

i,則,在別的請求中能夠讀到這個修改的內容。 

若是在@controller

之前增加

@scope(

「prototype」)

,就可以改變單例模式為多例模式

2. 如果

controller

類是單例,那麼多個執行緒請求同乙個

controller

類中的同乙個方法,執行緒是否會堵塞

} 驗證方法:分別傳送兩個請求,

第乙個請求:http://localhost:8080/coreplat/sleepdata?sleep=on

第二個請求:http://localhost:8080/coreplat/sleepdata?sleep=test

驗證結果:第乙個請求發出去以後,本地伺服器等待100s

,然後返回結果」

sleep on」,

在本地伺服器等待的者

100s

當中,傳送第二個請求,直接返回結果」

test

」。說明之間的執行緒是不互相影響的。

SpringMVC Controller單例和多例

對於springmvc controller單例和多例,下面舉了個例子說明下.第一次 類是多例,乙個普通屬性和乙個靜態屬性。結果 普通屬性 0.靜態屬性 0 普通屬性 0.靜態屬性 1 普通屬性 0.靜態屬性 2 普通屬性 0.靜態屬性 3 所以說 對於多例情況普通屬性時不會共用的,不會產生影響,對...

SpringMVC Controller單例和多例

對於springmvc controller單例和多例,下面舉了個例子說明下.第一次 類是多例,乙個普通屬性和乙個靜態屬性。結果 普通屬性 0.靜態屬性 0 普通屬性 0.靜態屬性 1 普通屬性 0.靜態屬性 2 普通屬性 0.靜態屬性 3 所以說 對於多例情況普通屬性時不會共用的,不會產生影響,對...

SpringMVC Controller單例和多例

對於springmvc controller單例和多例,下面舉了個例子說明下.第一次 類是多例,乙個普通屬性和乙個靜態屬性。結果 普通屬性 0.靜態屬性 0 普通屬性 0.靜態屬性 1 普通屬性 0.靜態屬性 2 普通屬性 0.靜態屬性 3 所以說 對於多例情況普通屬性時不會共用的,不會產生影響,對...