• 《Spring》(六)---- Bean的scope


    • Bean的scope

      配置中的bean定义可以看作是一个模板,容器会根据这个模板来构造对象,但是要根据这个模板构造多少个对象,又该让这些构造完的对象实例存活多久,则由容器的scope定义。scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象。

      Spring容器提供了五种scope类型,singleton,prototype, request, session,global session(后边三种职能在web应用中使用)

    1. singleton

      标记为拥有singleton scope的对象定义,在IoC容器中只存在一个实例,所有对该对象的引用将共享这个实例,该实例从容器启动,并因为第一次被请求而初始化之后,将一直存活到容器退出,它与IoC容器几乎拥有相同的寿命。

      通常情况下,如果不指定bean的scope,singleton便是容器默认的scope.

      2. prototype

      针对声明为拥有prototype scope的bean定义,容器在接到该类型对象的请求的时候,会每次都重新生成一个新的对象实例给请求方。对象实例返回给请求方之后,容器就不再拥有当前返回对象的引用了,请求放需要自己负责当前返回对象的后继生命周期的管理工作,包括对象的销毁。

      对于那些请求方不能共享使用的对象类型,应该将其bean定义的scope设置为prototype。这些对象一般都是一些有状态的,比如保存每个顾客信息的对象。

      3. request, session, global session

    这三个通常与XMLWebApplicationContext共同使用。

        a. request

      Spring容器会为每个HTTP请求创建一个全新的Request-Processor对象供当前请求使用,当请求结束后,该对象实例的生命周期即告结束。从不很严格的意义上说,request可以看作prototype的一种特例,除了场景更加具体外,语义差不多。

        b. session

      对于Web应用来说,放到session中的最普遍的信息就是用户的登陆信息。Spring容器会为每个独立的session创建属于它们自己的全新的对象实例。与request相比,除了bean的存活时间长了一点外,其他方面没什么差别。

        c. global session

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

  • 相关阅读:
    oracle 11g 更改字符集,9i导入11g 出现 ORACLE 错误 12899 处理
    使用XUACompatible来设置IE浏览器兼容模式
    server2008中如何关闭internet explorer增强的安全配置
    oracle修改密码
    ORA28000: the account is locked的解决办法
    C#与word
    Javascript 使用大全
    双机热备、集群及高可用性入门(转载 rdxx.com)
    table画细线
    CSS总结
  • 原文地址:https://www.cnblogs.com/IvySue/p/6480210.html
Copyright © 2020-2023  润新知