Spring Framework中的Bean Scope是Spring IOC容器管理的bean的scope。我们知道,Spring Framework是一个基于IOC,并且给Java应用提供bean管理工具的框架。在Spring管理的环境中,bean(Java Classes)被Spring框架创建和获取的。Spring允许你定义bean怎样被创建,以及bean的scope是这些细节中一个方面。
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应用上下文中可用,如WebApplicationContext。
当你在Spring应用中不指具体scope属性时,Singleton bean scope是默认的bean scope。Singleton bean scope像Java中的单例模式,在每个Spring容器中仅有一个bean的实例被创建。所以无论你调用getBean()方法多少次,如果它的bean scope被声明为单例,仅会返回相同的实例。
另一方面,request bean scope允许每个HTTP请求有它自己的且由Spring Framew创建和提供的bean实例,然而Session bean scope允许Web应用基于每个session一个实例。这两种bean scope在WebApplicationContext或者任何web aware应用上下文中都可用。最后一种global session bean scope仅应用在porlet aware bean scope上,并且允许每个global session一个bean实例。
其实到这里,应该提一个有意思的问题,上述5种scope的bean能相互引用么??
参考资料
bean scopes