1、Spring支持bean的六種作用域,如果使用AppliactionContext的話,只可以使用5種。
---- singleton:(默認)每一個Spring IOC容器單個bean定義只能產生一個對象實例。
---- prototype:單個bean定義可以創建任何數量的定義。
---- request:單個bean定義的創建實例的作用域是一次Http request請求。
---- session:單個bean定義的創建實例的作用域是session的生命周期。
---- application:單個bean定義的創建實例的作用域是ServletRequest的生命周期。
---- websocket:單個bean定義的創建實例的作用域是websocket的生命周期。
2、使用singleton時,單個bean只管理一個共享實例,當根據配置文件創建bean之后,這個單獨的實例,存儲在單個bean的緩存中。任何對這個bean的請求和引用都會返回那個緩存的對象。
3、非單例模式,bean部署采用原型作用域時,每次產生一個bean的創建的請求時,都會創建一個新的bean的實例。
4、與其他作用域相比,Spring不管理prototype bean的生命周期,容器初始化,配置,組裝原型對象,傳遞給客戶端。使用prototype bean的時候,要注意,釋放對象,因為spring不會管理bean的銷毀工作。
5、request session application websocket 都是由ApplicationContext實現,由正規的IoC容器ClassPathXmlApplicationContext來使用這些作用域,會拋出IllegalStateException異常。
6、request作用域注解:@RequestScope
session作用域注解:@SessionScope
application作用域注解:@ApplicationScope
7、當把將不同作用范圍的bean注入時,可以使用代理完成這一項工作。
8、當將propertyScope的bean聲明為<aop:scoped-proxy/>時,每個在共享代理的方法調用都會引起一個新目標實例的創建。
9、<aop:scoped-proxy/>默認為CGLIB代理。
10、通過配置<aop:scoped-proxy/>標簽的proxy-target-class="false"屬性,來配置jdk代理,但是這時候需要有接口存在。
11、通過實現org.springframework.beans.factory.config.Scope接口
重寫其中的方法,在使用的過程中要先創建當前自定義scope實例,然后通過BeanFactory的registScope() 方法對當前作用域命名和注冊。