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 閱讀(1183)
評論(0) 編輯 收藏 所屬分類:
spring