Spring 中 Bean的作用域

     在定义配置文件的时候,用户不但可以配置Bean的属性值和相互之间的依赖关系,还可以定义Bean的作用域,作用域将对Bean的生命周期和创建方式产生影响

    Bean的作用域类型如图所示

    

        1  singleton 作用域

     singleton的Bean在同一Spring容器中只有一个实例,Spring中默认的Bean的作用域为singleton,比如 

  <!--bean的作用域-->
    <bean id="car21" class="com.learn.bean.Car" scope="singleton"/>
    <bean id="boss12" class="com.learn.bean.Boss" p:car-ref="car21"/>
    <bean id="boss13" class="com.learn.bean.Boss" p:car-ref="car21"/>
     boss12 和boss13指向的是同一个Car实例。任何通过容器的getBean("car21")方法返回的Car实例也指向的是同一个Bean。 

   2  prototype 作用域

      指定prototype作用域的Bean,每次通过Spring的getBean("") 方法返回的实例,都会new一个对象

  <!--bean的作用域-->
    <bean id="car21" class="com.learn.bean.Car" scope="prototype"/>
    <bean id="boss12" class="com.learn.bean.Boss" p:car-ref="car21"/>
    <bean id="boss13" class="com.learn.bean.Boss" p:car-ref="car21"/>
   boss12 和boss13指向的是不同的Car实例,而且通过Spring 的getBean方法返回的也是不同的Car实例对象。

  3  request,session,globalsession作用域都是继续web容器的作用域,首先需要在web容器中进行额外的配置以使Spring容器可以监听web容器的每一次http请求

      在web.xml,加入如下配置

<web-app>
  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
</web-app>
   request作用域的Bean对应一个Http请求和生命周期  

 <!--bean的作用域-->
    <bean id="car21" class="com.learn.bean.Car" scope="request"/>
   这样,每次Http请求调用car Bean时,Spring容器都会创建一个新的car Bean,请求处理完后,就会销毁这个car Bean

   session作用域的Bean,横跨整个Http Session,Session中所有的HTTP请求都共享一个Bean,当http Session结束后,实例才会被销毁

  

     

    

    

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值