spring中bean的作用域

    所有的spring bean 默认都是单例。当容器分配一个bean时,它总是返回bean的同一个实例。但有时我们需要每次请求时都获得唯一的bean实例,那么如何覆盖spring默认的单例配置呢?

   当在spring中配置<bean>时,我们可以为bean声明一个作用域。为了让spring在每次请求时都为bean产生一个新的实例,我们只需要配置bean的scope属性为prototype即可。例如,把演出门票声明为 spring bean:

<bean id="ticket" class="com.springaction.springidol.Ticket" scope="prototype"></bean>


spring 的bean作用域允许用户配置所创建的bean属于哪一种作用域,而无需再bean的实现里硬编码作用域规则。

作用域                                                                                                      定义

singleton               在每一个spring容器中,一个Bean定义只有一个对象实例(默认)

prototype                允许bean的定义可以被实例化任意次(每次调用都创建一个实例)

request                  在一次http请求中,每个bean定义对应一个实例。该作用域仅在基于web的spring上下文中才有效。

session                 在一个http session中,每个bean定义对应一个实例。该作用域仅在基于web的spring上下文中才有效。

global-session     在一个全局http session中,每个bean定义对应一个实例。该作用域仅在portlet上下文中才有效。


大多数情况下,我们只需要选择默认的singleton作用域即可,但是如果我们使用spring作为工厂来创建领域对象新实例时,prototype作用域就非常有用。

spring有关单例的概念限于spring上下文的范围内,不像真正的单例,在每个类加载器中保证只有一个实例。spring的单例bean只能保证在每个应用上下文中只有一个bean的实例。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值