Bean的作用域
在spring2.0中,一共定义了5种作用域,分别是singleton、prototype、request、session、
globalSession。其中后面三种仅对WEB应用程序有效。
spring2.0通过scope=""属性来定义Bean有作用域,而在spring1.x中,由于只有singleton 和
prototype这两种作用域,因此,spring1.x中定义Bean的作用域是通过singleton=“true|false" 来
定义的。在spring2.0中首先应该考虑用scope属性来定义Bean 的作用域。
Singleton作用域
spring2.0是默认Bean的作用域是scope="singleton"。即spring的IoC容器仅为每个Bean创建一个
实例并且保持Bean的引用,换言之,每次调用getBean()方法请求返回的Bean总是同一个实例。这类似
于《设计模式》一书中的Singleton(单例)模式。
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {};
pubilc static Singleton getInstance() {
return instance;
}
}
由于构造方法被申明为private,因此,在类的外部不可实例化该类,唯一的实例持有在静态引用中
从外部获取该实例的唯一入口是调用Singleton的静态方法Singleton.getInstance().
Prototype作用域
如果需要每次返回Bean的新实例,即每次都新建一个实例,则可以通过设置scope="prototype"来
实现。这样我们就告诉了spring容器采用Prototype作用域。采用prototype作用域时,spring容器总会
返回一个创建的新实例,因此spring容器一旦将实例交给客户端,就不再对其进行跟踪引用了,所以
无法对prototype作用域的Bean定义destory-method,不过仍可以使用init-method。
其它三个属性值仅对WEB程序有效,这里不作讨论。
posted on 2007-10-21 17:55
Ke 阅读(1176)
评论(0) 编辑 收藏 所属分类:
spring