spring IOC之Bean的scope属性值

spring IOC之Bean的scope属性值:prototype与singleton

http://gjdrift.diandian.com/post/2012-10-03/40040171461

如果在<bean>中指定Bean的作用范围为scope="prototype",将Bean返回给调用者,调用者负责Bean

后续生命的管理,spring不再管理这些Bean的生命周期.如果作用范围设置为scope="singleton",则将

Bean放入Spring IOC容器的缓存池中,并将Bean引用返回给调用者,spring继续对这些Bean进行后续

的生命管理. 默认属性是singleton



1.2.  Bean以两种形态存在:singletons形式和prototypes形式。当bean以singletons形态存在时,BeanFactory只管理一个共享的实例。所有对这个特定bean的实例请求,都导致返回这个唯一bean实例的引用。
当bean以prototype形态存在时,每次对这个bean的实例请求都会导致一个新的实例的创建。当用户需要不受其他用户对象影响的对象或有类似的需求时,这是一个较理想的解决办法。
Bean默认是以singleton形态存在的,除非你另外显式加以指定。留神,当把bean的设置改为prototype模式时,每次对这个bean的实例请求都会导致一个新的bean实例被创建,而这可能并不是你所期望的。所以,只应该在确实需要的情况下把bean设置为prototype模式

3、request

request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:

request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:

如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可: 





<web-app>

   ...

  <listener>

<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

  </listener>

   ...

</web-app>




如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现: 





<web-app>

..

<filter>

    <filter-name>requestContextFilter</filter-name>

    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>requestContextFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

   ...

</web-app>




接着既可以配置bean的作用域了:




<bean id="role" class="spring.chapter2.maryGame.Role"scope="request"/>




4、session

session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效,配置实例:

配置实例:

和request配置实例的前提一样,配置好web启动文件就可以如下配置: 





<bean id="role" class="spring.chapter2.maryGame.Role"scope="session"/>




5、global session

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

配置实例:

和request配置实例的前提一样,配置好web启动文件就可以如下配置: 





<bean id="role" class="spring.chapter2.maryGame.Role"scope="global session"/>

猜你喜欢

转载自love398146779.iteye.com/blog/2059941