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屬性來調用。