spring註解[email protected]

[email protected]作用?

@Scope註解用於作用域。SpringIoc中容器的作用域包含如下幾種:
1.1 singleton(單例模式,默認模式):全局有且僅有一個實例
1.2 prototype(多例模式):每次獲取bean的時候會生成一個新的實例
1.3 web(request、session、globalSession)
1.3.1 request:每一次HTTP請求都會產生一個新的實例,該實例僅在當前HTTP request內有效
1.3.2 session:每一次HTTP請求都會產生一個新的實例,該實例僅在當前HTTP session內有效
1.3.3 globalSession:它僅僅基於portlet中才生效
1.4 自定義作用域:

[email protected]使用模式?

直接在bean對象方法上增加@Scope註解就行
單例模式如下

@Bean
@Scope("singleton")
public User getUser(){
	System.out.println("全局有且僅有一個實例!");
}

多例模式如下

@Bean
@Scope("prototype")
public User getUser(){
	System.out.println("每次獲取bean的時候會生成一個新的實例");
}

[email protected]使用場景?

spring中默認的類型是singleton,singleton保證了全局只有一個實例,對性能有所提高,但如果實例中使用了非靜態變量時,會導致線程安全問題,共享資源的競爭問題。
當設置prototype時,每次請求都會生成一個bean實例,這會導致請求越多,bean對象越多,性能下降,甚至會導致GC暴漲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章