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