spring bean的做用域

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

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

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

!!通常状况,对有状态的bean应该使用prototype做用域,而对无状态的bean则应该使用singleton做用域。spa

!!prototype做用域Bean的建立、销毁代价比较大。而singleton做用域的Bean实例一旦建立成功,能够重复使用。所以,除非必要,不然尽可能避免将Bean被设置成prototype做用域。prototype

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

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

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

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

考虑下面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 还支持自定义做用域。
相关文章
相关标签/搜索