Spring 實(shí)例化 bean 的方式
- 構(gòu)造器的方式
- 靜態(tài)工廠方式
- 實(shí)例化工廠方式
案例實(shí)操
構(gòu)造器的方式實(shí)例化 bean 對(duì)象
<bean id="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)工廠模式
*
*/
public class StaticFactory {
public static GoodsService createGoodsService() {//方法一定要是一個(gè)靜態(tài)方法
return new GoodsService();
}
}
GoodsService實(shí)體類
public class GoodsService {
public void getGoodsInfo() {
System.out.println("外星人賊便宜");
}
}
Bean配置
<bean id="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
*
*/
public class InstanceFactory {
public OrderService createOrderService() {
return new OrderService();
}
}
實(shí)體類定義
public class OrderService {
public void getOrderInfo() {
System.out.println("親,已經(jīng)下單完成蹬昌,但是想發(fā)貨沒門");
}
}
Bean配置
<!--
實(shí)例化工廠
1混驰、定義實(shí)例化工廠bean
2、引用工廠bean指定工廠創(chuàng)建方法(方法為非靜態(tài))
-->
<bean id="instanceFactory" class="com.xxx.demo.InstanceFactory"></bean>
<bean id="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í)直接拿來使用即可鞍陨,另外兩種了解即可。