您的位置:首页 > 编程语言 > Java开发

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

2013-04-24 18:22 99 查看
在SpringIOC容器中,由它管理的JavaBean具有作用范围。

Spring1.x版本

在Spring1.x版本中,标签有一个属性singleton,取值为布尔类型。如果将其设置为true,那么容器之中只存在一个该bean的共享实例,当其他的任何Bean依赖该bean时,只要请求的id与该bean的id相同,容器就将该bean的实例注入到请求的bean中。换言之,SpringIoC容器只是创建该bean的一个唯一实例,并把它存存贮在容器的单例缓存中,在需要时才将其取出。这样的受管bean称之为“单例bean”。

如果设置为false,那么每当其他bean依赖此bean时,容器则会重新实例化一个该bean对象,为其注入。

需要注意的是:

1、在下面的例子中,如果把computer1和computer2两个受管bean都设置成单例bean,SpringIoC容器则分别实例化两个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、SpringIoC容器不会维护prototype类型的bean的整个声明周期,容器在实例化、配置、注入之后就把它扔给调用者,然后就不管了。

4、如果一个单例beancomputer引用了一个prototype类型的beanhost,由于单例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、globalsession,这种bean在web的全局session范围内有效。只用于webportlet框架中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: