spring in action解讀二

bean作用域

單例(Singleton):默認情況

在整個應用中,只創建bean的一個實例

原型(Prototype)

每次注入或者通過spring應用上下文獲取的時候,都會創建一個新的Bean實例

使用方式:可同時與@Component和@Bean使用
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Scope(“prototype”)
使用XML配置的話:

會話(Session)

在Web應用中,爲每個會話創建一個Bean實例

使用方式:可同時與@Component和@Bean使用
@Scope(value = WebApplicationContext.SCOPE_GLOBAL_SESSION,proxyMode = ScopedProxyMode.INTERFACES)
注:proxyMode這是解決會話或者請求作用域的bean注入到單例bean中所遇到的問題

默認創建一個給予CGLIB的代理,或者,開發者可以通過指標籤的proxy-target-class屬性的值爲false來配置Spring容器來爲這些短作用域的Bean創建一個標準JDK的基於接口的代理。

全局會話(Global Session)

限定一個Bean的作用域爲全局HTTPSession的生命週期。通常用於門戶網站場景,同樣,只有基於web的Spring ApplicationContext可用

請求(Request)

在Web應用中,爲每個請求創建一個Bean實例

應用(Application)

限定一個Bean的作用域爲ServletContext的生命週期。同樣,只有基於web的Spring ApplicationContext可用

自定義作用域

實現org.springframework.beans.factory.config.Scope接口。同時爲了讓spring容器能夠識別和發現自定義的作用域。
void registerScope(String scopeName, Scope scope);

這個方法是在ConfigurableBeanFactory的接口中聲明的,在大多數的ApplicationContext的實現中都是可以用的,可以通過BeanFactory屬性來調用。
void registerScope(String scopeName, Scope scope);

這個方法是在ConfigurableBeanFactory的接口中聲明的,在大多數的ApplicationContext的實現中都是可以用的,可以通過BeanFactory屬性來調用。

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