Spring——Bean的作用域

简介:

     bean作为Spring容器中最重要的组件,也有其生命周期。Spring容器最初提供了两种bean的scope类型:singleton和prototype,在Spring2.0之后又引入了另外三种scope类型:request、session、global session类型。不过这三种类型有所限制:只能在Web应用中使用。也就是说,只有Web应用的ApplicationContext中使用这三个scope才合理。

     

Spring Framework支持以下五个范围,其中三个范围仅在您使用支持Web的ApplicationContext时才可用。

  1. Singleton

    singleton是容器默认的scope,所以写和不写没有区别。scope为singleton的时候,在Spring的IoC容器中只存在一个实例,所有对该对象的引用将共享这个实例。该实例从容器启动,并因为第一次被请求而初始化后,将一直存活到容器退出,也就是说,它与IoC容器“几乎”拥有相同的寿命。
            
             singleton的bean具有的特性                                                                                                                                                   对象实例数量:singleton类型的bean定义,在一个容器中只存在一个共享实例,所有对该类型bean的依赖都引用这一单一实例
         对象存活时间:singleton类型bean定义,从容器启动,到它第一次被请求而实例化开始,只要容器不销毁或退出,该类型的单一实例就会一直存活

  2. Prototype(多例)

    对于那些请求方不能共享的对象实例,应该将其bean定义的scope设置为prototype。这样,每个请求方可以得到自己对应的一个对象实例。通常,声明为prototype的scope的bean定义类型,都是一些有状态的,比如保存每个顾客信息的对象                   


          这三个scope类型是Spring2.0之后新增加的,它们不像上面两个那么通用,它们只适用于Web应用程序,通常是与XmlWebApplicationContext共同使用(注意:只能使用scope属性才能使用这三种,也就是必须使用XSD文档声明的XML配置文件格式)

  3. request

    在Spring容器中,即XmlWebApplicationContext会为每个HTTP请求创建一个全新的Request-Processor对象供当前请求使用,当请求结束后,该对象实生命周期就结束。当同时有10个HTTP请求进来的时候,容器会分别针对这10个请求返回10个全新的RequestProcessor对象实例,且它们之间互不干扰。所以严格意义上说request可以看作prototype的一种特例,除了request的场景更加具体

  4. session

    放到session中的最普遍的信息就是用户登录信息,Spring容器会为每个独立的session创建属于它们自己全新的UserPreferences对象实例。与request相比,除了拥有session scope的bean比request scope的bean可能更长的存活时间,其他没什么差别

  5. gobal session

    global session只有应用在基于portlet的Web应用程序中才有意义,它映射到portlet的global范围的session。如果在普通的基于servlet的Web应用中使了用这个类型的scope,容器会将其作为普通的session类型的scope来对待

  • 什么是portlet                                                                                                                                                                                  Portlets是一种Web组件-就像servlets-是专为将合成页面里的内容聚集在一起而设计的。通常请求一个portal页面会引发多个portlets被调用。每个portlet都会生成标记段,并与别的portlets生成的标记段组合在一起嵌入到portal页面的标记内。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值