舉例:beanAssemble 項(xiàng)目
Bean的裝配,即Bean對(duì)象的創(chuàng)建。容器根據(jù)代碼要求創(chuàng)建 Bean 對(duì)象后再傳遞給代碼的過(guò)程,稱為Bean的裝配。
代碼通過(guò)getBean()方式從容器獲取指定的 Bean實(shí)例,容器首先會(huì)調(diào)用Bean類的無(wú)參構(gòu)造器,創(chuàng)建空值的實(shí)例對(duì)象。
舉例:
當(dāng)通過(guò) Spring 容器創(chuàng)建一個(gè) Bean 實(shí)例時(shí),不僅可以完成 Bean 的實(shí)例化,還可以通過(guò) scope 屬性,為 Bean 指定特定的作用域。Spring 支持 5 種作用域。
● singleton:?jiǎn)螒B(tài)模式。即在整個(gè) Spring 容器中,使用 singleton 定義的 Bean 將是單例的, 只有一個(gè)實(shí)例。默認(rèn)為單態(tài)的。
● prototype:原型模式。即每次使用 getBean 方法獲取的同一個(gè)的實(shí)例都是一個(gè) 新的實(shí)例。
● request:對(duì)于每次 HTTP 請(qǐng)求,都將會(huì)產(chǎn)生一個(gè)不同的 Bean 實(shí)例。
● session:對(duì)于每個(gè)不同的 HTTP session,都將產(chǎn)生一個(gè)不同的 Bean 實(shí)例。
注意:
● 對(duì)于 scope 的值 request、session 只有在 Web 應(yīng)用中使用 Spring 時(shí),該作用域才有效。
● 對(duì)于 scope 為 singleton 的單例模式,該 Bean 是在容器被創(chuàng)建時(shí)即被裝配好了。
● 對(duì)于 scope 為 prototype 的原型模式,Bean 實(shí)例是在代碼中使用該 Bean 實(shí)例時(shí)才進(jìn)行 裝配的。
舉例:
可以為 Bean 定制初始化后的生命行為,也可以為 Bean 定制銷毀前的生命行為。
舉例:
首先,這些方法需要在 Bean 類中事先定義好:是方法名隨意的 public void 方法。
其次,在配置文件的標(biāo)簽中增加如下屬性:
init-method:指定初始化方法的方法名
destroy-method:指定銷毀方法的方法名
注意,若要看到 Bean 的 destroy-method 的執(zhí)行結(jié)果,需要滿足兩個(gè)條件:
● Bean 為 singleton,即單例
● 要確保容器關(guān)閉。接口 ApplicationContext 沒有 close()方法,但其實(shí)現(xiàn)類有。所以,可以將 ApplicationContext 強(qiáng)轉(zhuǎn)為其實(shí)現(xiàn)類對(duì)象,或直接創(chuàng)建的就是實(shí)現(xiàn)類對(duì)象。