Bean的作用域
在spring2.0中,一共定義了5種作用域,分別是singleton、prototype、request、session、
globalSession。其中后面三種僅對WEB應(yīng)用程序有效。
spring2.0通過scope=""屬性來定義Bean有作用域,而在spring1.x中,由于只有singleton 和
prototype這兩種作用域,因此,spring1.x中定義Bean的作用域是通過singleton=“true|false" 來
定義的。在spring2.0中首先應(yīng)該考慮用scope屬性來定義Bean 的作用域。
Singleton作用域
spring2.0是默認Bean的作用域是scope="singleton"。即spring的IoC容器僅為每個Bean創(chuàng)建一個
實例并且保持Bean的引用,換言之,每次調(diào)用getBean()方法請求返回的Bean總是同一個實例。這類似
于《設(shè)計模式》一書中的Singleton(單例)模式。
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {};
pubilc static Singleton getInstance() {
return instance;
}
}
由于構(gòu)造方法被申明為private,因此,在類的外部不可實例化該類,唯一的實例持有在靜態(tài)引用中
從外部獲取該實例的唯一入口是調(diào)用Singleton的靜態(tài)方法Singleton.getInstance().
Prototype作用域
如果需要每次返回Bean的新實例,即每次都新建一個實例,則可以通過設(shè)置scope="prototype"來
實現(xiàn)。這樣我們就告訴了spring容器采用Prototype作用域。采用prototype作用域時,spring容器總會
返回一個創(chuàng)建的新實例,因此spring容器一旦將實例交給客戶端,就不再對其進行跟蹤引用了,所以
無法對prototype作用域的Bean定義destory-method,不過仍可以使用init-method。
其它三個屬性值僅對WEB程序有效,這里不作討論。