spring bean的作用域

1singleton:单例模式,Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

<bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl" scope="singleton">

2prototype原型模式,Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。

!!一般情况,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

!!prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。

3request每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于webSpring ApplicationContext情形下有效。

4session在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于webSpring ApplicationContext情形下有效。

!!request、session作用域的Bean只对Web应用才真正有效。实际上通常只会将Web应用的控制器Bean才指定成request作用域

5global session在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于webSpring ApplicationContext情形下有效。

考虑下面bean定义:

<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>

global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portletweb应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。

!!假如你在编写一个标准的基于Servletweb应用,并且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误。

* spring 还支持自定义作用域。


你可能感兴趣的:(spring,bean,作用域)