官术网_书友最值得收藏!

1.6 bean的作用域

IOC容器通過XML配置文件定義bean,即描述如何在IOC容器中創建一個對象實例。bean是IOC容器中的對象,在配置bean時可以指定bean對象的作用域。Spring支持5種作用域(其中有3種只能用在基于Web的ApplicationContext中)。表1.2列出了這5種作用域及對應的描述,接下來會重點介紹singleton作用域和prototype作用域。

表1.2 Spring支持的5種作用域

1.6.1 singleton作用域

當把一個bean定義設置為singleton作用域時,Spring IOC容器只會創建該bean定義的唯一實例。singleton作用域是Spring中的默認作用域。

如圖1.4所示,IOC容器中只會存在一個共享的bean實例accountDao,所有對bean的請求,只要id與該bean定義相匹配,都只會返回bean的同一實例。

圖1.4 singleton作用域

1.6.2 prototype作用域

配置為prototype作用域的bean,會在每次對該bean請求(將其注入到另一個bean中,或者以程序的方式調用容器的getBean()方法)時都會創建一個新的bean實例。根據經驗,對有狀態的bean應該配置為prototype作用域,而對無狀態的bean則應該配置為singleton作用域。Prototype作用域如圖1.5所示。

圖1.5 prototype作用域

圖1.5描述了配置為prototype作用域的bean的特點。不過不要被圖例所誤導,通常情況下,DAO對象不會被配置成prototype作用域,因為DAO對象通常不會持有任何會話狀態,所以應該被配置成singleton作用域。要在XML配置文件中將bean定義成prototype作用域,可以按如下方式配置:

    <bean id="…" class="…" scope="prototype"></bean>

當singleton bean依賴prototype bean時,請注意依賴是在實例化時處理的。也就是說,如果要把一個prototype bean注入到singleton bean,實際上只是實例化一個新的prototype bean注入到singleton bean,并不是每次調用singleton bean的獲取屬性方法就能獲得一個新的prototype bean的實例。

主站蜘蛛池模板: 太仆寺旗| 新巴尔虎左旗| 新疆| 象州县| 加查县| 永平县| 上林县| 贵溪市| 班玛县| 平原县| 青阳县| 崇信县| 济南市| 乌拉特中旗| 襄汾县| 益阳市| 临江市| 新化县| 昌平区| 搜索| 高碑店市| 利辛县| 如皋市| 九寨沟县| 洱源县| 永靖县| 镇坪县| 连南| 博湖县| 扶风县| 仪陇县| 兖州市| 茌平县| 阿拉善盟| 宾川县| 额尔古纳市| 灌阳县| 高密市| 天台县| 江陵县| 汶川县|