Spring Controller單例陷阱

看到一篇對(duì)于Spring Controller的單例問(wèn)題分析的非常好,轉(zhuǎn)載如下


springmvc controller默認(rèn)的是單例singleton的,具體可以查看注解scope可以一目了然。

單例的原因有二:

1、為了性能。

2、不需要多例。

1、這個(gè)不用廢話(huà)了,單例不用每次都new,當(dāng)然快了。

2、不需要實(shí)例會(huì)讓很多人迷惑,因?yàn)閟pring mvc官方也沒(méi)明確說(shuō)不可以多例。

我這里說(shuō)不需要的原因是看開(kāi)發(fā)者怎么用了,如果你給controller中定義很多的屬性,那么單例肯定會(huì)出現(xiàn)競(jìng)爭(zhēng)訪(fǎng)問(wèn)了。

因此,只要controller中不定義屬性,那么單例完全是安全的。下面給個(gè)例子說(shuō)明下:

測(cè)試代碼

默認(rèn)單例的,隨著請(qǐng)求次數(shù)的增加:

0 | 0

1 | 1

2 | 2

3 | 3

4 | 4

...

controller增加注解:

增加多例注解

此時(shí),無(wú)論多少次請(qǐng)求,結(jié)果為:

0 | 0

1 | 0

2 | 0

3 | 0

4 | 0

...

從以上很容易看出,單例是線(xiàn)程不安全的,會(huì)導(dǎo)致屬性的重復(fù)性利用。

最佳實(shí)踐:

1、不要在controller中定義成員變量。

2、萬(wàn)一必須要定義一個(gè)非靜態(tài)成員變量時(shí)候,則通過(guò)注解@Scope("prototype"),將其設(shè)置為多例模式

轉(zhuǎn)載自http://lavasoft.blog.51cto.com/62575/1394669

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評(píng)論 6 342
  • spring官方文檔:http://docs.spring.io/spring/docs/current/spri...
    牛馬風(fēng)情閱讀 1,861評(píng)論 0 3
  • 天涯不相逢,煙攏冰都月朦朧。小樓寒夜飄飛雪,微冷,形單難御隆冬風(fēng)。 濁酒寄浮生,燈火繁華照孤城。重...
    劉烜宇閱讀 190評(píng)論 0 0
  • 喏,這是我家對(duì)面的圍龍屋,是不是和想象的不一樣,其實(shí)也沒(méi)啥好看的。端午那會(huì)給你的照片正面這么多朵玫瑰看到?jīng)]~
    恐血閱讀 215評(píng)論 0 0

友情鏈接更多精彩內(nèi)容