Spring Ioc 實(shí)例化 Bean 對(duì)象有幾種方式?

Spring 實(shí)例化 bean 的方式

構(gòu)造器的方式

靜態(tài)工廠方式

實(shí)例化工廠方式

案例實(shí)操

構(gòu)造器的方式實(shí)例化 bean 對(duì)象

<beanid="hello"name="hello"class="com.xxx.demo.Hello"></bean>

通過默認(rèn)構(gòu)造器創(chuàng)建 空構(gòu)造方法必須存在 否則創(chuàng)建失敗

靜態(tài)工廠模式

特點(diǎn):

要有該工廠類及工廠方法

工廠方法是靜態(tài)的

StaticFactory 靜態(tài)工廠

/**

* 靜態(tài)工廠模式

*

*/

publicclassStaticFactory{

? ? publicstaticGoodsServicecreateGoodsService() {//方法一定要是一個(gè)靜態(tài)方法

? ? ? ? returnnewGoodsService();

? ? }

}

GoodsService實(shí)體類

publicclassGoodsService{

? ? publicvoidgetGoodsInfo() {

? ? ? ? System.out.println("外星人賊便宜");

? ? }

}

Bean配置

<beanid="goodsService"

? ? ? ? class="com.xxx.demo.StaticFactory"factory-method="createGoodsService"></bean>

當(dāng)我們指定Spring使用靜態(tài)工廠方法來創(chuàng)建Bean實(shí)例時(shí),Spring將先解析配置文件,并根據(jù)配置文件指定的信息,通過反射調(diào)用靜態(tài)工廠類的靜態(tài)工廠方法,并將該靜態(tài)工廠方法的返回值作為Bean實(shí)例,在這個(gè)過程中,Spring不再負(fù)責(zé)創(chuàng)建Bean實(shí)例,Bean實(shí)例是由用戶提供的靜態(tài)工廠方法提供的。

實(shí)例化工廠方式創(chuàng)建 Bean

相比較靜態(tài)工廠實(shí)現(xiàn)

1、工廠方法為非靜態(tài)方法

2、需要配置工廠bean,并在業(yè)務(wù)bean中配置factory-bean,factory-method屬性

實(shí)例化工廠定義

/**

* 實(shí)例化工廠

* @author Best Liu

*

*/

publicclassInstanceFactory{

? ? publicOrderServicecreateOrderService() {

? ? ? ? returnnewOrderService();

? ? }

}

實(shí)體類定義

publicclassOrderService{

? ? publicvoidgetOrderInfo() {

? ? ? ? System.out.println("親,已經(jīng)下單完成,但是想發(fā)貨沒門");

? ? }

}

Bean配置

<!--

? ? 實(shí)例化工廠

? ? 1、定義實(shí)例化工廠bean

? ? 2、引用工廠bean指定工廠創(chuàng)建方法(方法為非靜態(tài))

-->

? ? <beanid="instanceFactory"class="com.xxx.demo.InstanceFactory"></bean>

? ? <beanid="orderService"factory-bean="instanceFactory"factory-method="createOrderService"></bean>

擴(kuò)展

Spring 三種實(shí)例化 bean 的方式比較

方式一:通過bean的缺省構(gòu)造函數(shù)創(chuàng)建,當(dāng)各個(gè)bean的業(yè)務(wù)邏輯相互比較獨(dú)立的時(shí)候或者和外界關(guān)聯(lián)較少的時(shí)候可以使用。

方式二:利用靜態(tài)factory方法創(chuàng)建,可以統(tǒng)一管理各個(gè)bean的創(chuàng)建,如各個(gè)bean在創(chuàng)建之前需要相同的初始化處理,則可用這個(gè)factory方法先進(jìn)行統(tǒng)一的處理等等。

方式三:利用實(shí)例化factory方法創(chuàng)建,即將factory方法也作為了業(yè)務(wù)bean來控制,

1、可用于集成其他框架的bean創(chuàng)建管理方法

2、能夠使bean和factory的角色互換

開發(fā)中項(xiàng)目一般使用一種方式實(shí)例化bean,項(xiàng)目開發(fā)基本采用第一種方式,交給spring托管,使用時(shí)直接拿來使用即可,另外兩種了解即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容