Spring Framework中的Bean Scope是Spring IOC容器管理的bean的scope妹孙。我們知道,Spring Framework是一個基于IOC获枝,并且給Java應(yīng)用提供bean管理工具的框架蠢正。在Spring管理的環(huán)境中,bean(Java Classes)被Spring框架創(chuàng)建和獲取的省店。Spring允許你定義bean怎樣被創(chuàng)建嚣崭,以及bean的scope是這些細節(jié)中一個方面。
Spring Framework中懦傍,定義在ApplicationContext.xml中的bean可以是下列5種scopes:
- Singleton(默認scope)
- prototype
- request
- session
- global-session
Singleton和prototype是兩種最常見的bean scope雹舀,它們在所有Spring Application Context都可用。但是request谎脯,session和global session bean scope僅在web應(yīng)用上下文中可用葱跋,如WebApplicationContext。
當(dāng)你在Spring應(yīng)用中不指具體scope屬性時,Singleton bean scope是默認的bean scope娱俺。Singleton bean scope像Java中的單例模式稍味,在每個Spring容器中僅有一個bean的實例被創(chuàng)建。所以無論你調(diào)用getBean()方法多少次荠卷,如果它的bean scope被聲明為單例模庐,僅會返回相同的實例。
另一方面油宜,request bean scope允許每個HTTP請求有它自己的且由Spring Framew創(chuàng)建和提供的bean實例掂碱,然而Session bean scope允許Web應(yīng)用基于每個session一個實例。這兩種bean scope在WebApplicationContext或者任何web aware應(yīng)用上下文中都可用慎冤。最后一種global session bean scope僅應(yīng)用在porlet aware bean scope上疼燥,并且允許每個global session一個bean實例。
其實到這里蚁堤,應(yīng)該提一個有意思的問題醉者,上述5種scope的bean能相互引用么?披诗?
參考資料
bean scopes