当前位置:首页 > 开发 > 编程语言 > Spring > 正文

spring 创建实体bean的范围

发表于: 2011-10-13   作者:bozch   来源:转载   浏览:
摘要: (个人笔记,如有不足之处,谢谢指正)在spring3.0.6中,spring提供了5中scope,分别是singleton、prototype、request、session、global session。这5种是已经被注册的,还有一种thread scope是没有被注册的。spring 3.0也提供了相应的方法来注册某种scope或这自定义相应的scope。下面针对已经提供的几种scope逐一介
(个人笔记,如有不足之处,谢谢指正)在spring3.0.6中,spring提供了5中scope,分别是singleton、prototype、request、session、global session。这5种是已经被注册的,还有一种thread scope是没有被注册的。spring 3.0也提供了相应的方法来注册某种scope或这自定义相应的scope。下面针对已经提供的几种scope逐一介绍一下:
    1、singleton:它是在spring容器中只有一个实例。在设计模式中讲到的单例模式,他是相对于某个classLoader存在的。在spring中配置相应的实体时,如果没有定义scope属性,默认的是采用singleton。例如:<bean id="personService" class="com.zb.PersonService"/>与<bean id="personService" class="com.zb.PersonService" scope="singleton"/>效果是一样的。
    2、prototype:这种scope在注入到其他实体中或者在程序中通过getBean()获得的实体都是不同的。这用scope应用,在spring中有如下说明:As a rule, use the prototype scope for all stateful beans and the singleton scope for stateless beans.(一般来说,prototype应用与状态性的实体,而singleton应用于无状态的实体中)。
在使用这种scope的时候,他会占用大量的系统资源。所以这需要定期的对它占用的资源进行清理。

   注:在singleton实例中注入prototype实例时,依赖关系是在初始化的时候就确定了,一旦将prototype的实例注入到实例中,那么当前prototype实例会一直服务于singleton实例。如果想在运行是singleton能够获得不同的prototype实例,则需要用到“方法注入(Method injection)”
   3、request 、session、global session
      在使用这些scope的时候需要做一些必要的配置,当然这些配置对singleton和prototype并不是必须的。
       如果在web项目中使用了spring的mvc,则就不需要相关配置了。因为spring Mvc 的request请求是Spring DispatcherServlet, or DispatcherPortlet来处理的。Spring DispatcherServlet, or DispatcherPortlet暴露了所有的相关状态。
      如果是使用了serlvet2.4以上的容器,所有的请求并没有使用Spring的DispatcherServlet,例如jsf,struts,这是就需要在web.xml中配置监听器javax.servlet.ServletRequestListener,配置如下:
   <listener>
      <listener-class>
         org.springframework.web.context.request.RequestContextListener
      </listener-class>
   </listener>
如果是使用的web容器是低版本的,如servlet2.3,则需要把下面的配置加入到web.xml中:<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>

global session只能应用在portlet类的项目中。

spring 创建实体bean的范围

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号