Spring中bean的作用范围:Scope属性的值

 在Spring IOC容器中,由它管理的Java Bean具有作用范围。

Spring1.x版本

在Spring1.x版本中,标签有一个属性singleton,取值为布尔类型。如果将其设置为true,那么容器之中只存在一个该bean的共享实例,当其他的任何Bean依赖该bean时,只要请求的id与该bean的id相同,容器就将该bean的实例注入到请求的bean中。换言之,Spring IoC容器只是创建该bean的一个唯一实例,并把它存存贮在容器的单例缓存中,在需要时才将其取出。这样的受管bean称之为“单例bean”。
如果设置为false,那么每当其他bean依赖此bean时,容器则会重新实例化一个该bean对象,为其注入。
需要注意的是:
1、在下面的例子中,如果把computer1和computer2两个受管bean都设置成单例bean,Spring IoC容器则分别实例化两个bean,把它们作为两个不同的bean对待,尽管他们的类相同。
1<bean id="computer1" class="ioc.test.Computer" scope="singleton"/></bean>
2 <bean id="computer2"class="ioc.test.Computer" scope="singleton"/></bean>
2、一般来说,对于无状态的bean使用单例模式,对于有状态的bean使用prototype模式。
3、Spring IoC容器不会维护prototype类型的bean的整个声明周期,容器在实例化、配置、注入之后就把它扔给调用者,然后就不管了。
4、如果一个单例bean computer引用了一个prototype类型的bean host,由于单例bean只初始化一次,所以不能保证每次调用computer时host都是最新的。解决办法是使用lookup方法注入。

Spring2.0时代

到了Spring2.0时代,scope属性代替了原来的的singleton属性,scope提供了更多的选项,从而可以更加灵活的配置bean的作用范围。Spring2.0中,scope属性有如下可能的取值,说明如下:
1、 singleton,即单例bean,和1.x中singleton=”true”相同。
2、 prototype,同Spring1.x中的singleton=”false”。
3、 request,这种bean在web的request范围内有效,即每次请求时都会产生一个实例。只用于web程序中。
4、 session,这种bean在web的session范围内有效。只用于web程序中。
5、 global session,这种bean在web的全局session范围内有效。只用于web portlet框架中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值