SpringMVC Controller單例和多例

對於SpringMVC Controller單例和多例,下面舉了個例子說明下.
第一次:類是多例,一個普通屬性和一個靜態屬性。

 

結果:普通屬性:0.............靜態屬性:0
普通屬性:0.............靜態屬性:1
普通屬性:0.............靜態屬性:2
普通屬性:0.............靜態屬性:3
因此說:對於多例狀況普通屬性時不會共用的,不會產生影響,對於靜態屬性會去共用這個屬性。
 
第二次:類改成單例

 

 

結果:普通屬性:0.............靜態屬性:0
普通屬性:1.............靜態屬性:1
普通屬性:2.............靜態屬性:2
普通屬性:3.............靜態屬性:3
因此說:對於單例狀況普通屬性和靜態屬性都會被共用。
 
第三次:類去掉@Scope註解

 

 

結果:普通屬性:0.............靜態屬性:0
普通屬性:1.............靜態屬性:1
普通屬性:2.............靜態屬性:2
普通屬性:3.............靜態屬性:3
因此說:springmvc默認是單例的。
 
另外在其餘方法裏面打印

 

 

輸出的結果是

 

 

跳到別的方法裏面也並不會去取初始值,而是再去共用這個屬性。
 
最終:儘可能不要在controller裏面去定義屬性,若是在特殊狀況須要定義屬性的時候,那麼就在類上面加上註解@Scope("prototype")改成多例的模式,之前struts是基於類的屬性進行發的,定義屬性能夠整個類通用,因此默認是多例,否則多線程訪問確定是共用類裏面的屬性值的,確定是不安全的,可是springmvc是基於方法的開發,都是用形參接收值,一個方法結束參數就銷燬了,多線程訪問都會有一塊內存空間產生,裏面的參數也是不會共用的,全部springmvc默認使用了單例,因此controller裏面不適合在類裏面定義屬性,只要controller中不定義屬性,那麼單例徹底是安全的。springmvc這樣設計主要的緣由也是爲了提升程序的性能和之後程序的維護只針對業務的維護就行,要是struts的屬性定義多了,都不知道哪一個方法用了這個屬性,對之後程序的維護仍是很麻煩的
相關文章
相關標籤/搜索