理解Spring的Bean工廠

2021-09-08 17:27:46 字數 2221 閱讀 7852

提到工廠,我們先來回顧前面學習過的工廠方法和抽象工廠模式:

廠方法:針對產品維度,能夠產生新的產品,也能夠產生新的產品工廠,既能夠擴充套件產品維度。

可是假設我們想在普通工廠上生產產品系列,就會特別麻煩

假設產生

你就得產生

,假設產生

mushroom

,就得產生

mushroomfactory.

這樣就會照成工廠氾濫。

抽象工廠:針對產品系列,能夠在謀一系列的產品上進行擴充套件。缺點是假設

產生產品新種,修改就會非常多。

spring工廠:能夠在產品系列方面既能擴充套件,又能確定產品品種。以下是spring的例項:

1.首先定義乙個介面兩個類:

public class car implements moveable 

}

public class train implements moveable 

}

public inte***ce moveable

<?xml version="1.0" encoding="utf-8"?>

3.測試類:

public static void main(string args) throws exception 

}

spring利用本身讀取xml配置檔案,而且實現了beanfactory介面。我們僅僅須要在client傳入配置檔案名稱,傳入配置檔案的id,就能依據id找到對應的class產生的物件,並將物件作為乙個bean反饋回來。 

上面是封裝好的乙個spring,那麼我們怎樣來模擬spring的原理呢?

spring模擬:定義乙個

beanfactory,

在這個裡面有自己的實現,最常見的實現

classpathxml ,

從這裡面讀

xml,把讀到的資訊都裝在乙個

map裡面,當你要的時候再拿出來。

a.定義beanfactory介面和getbean方法

public inte***ce beanfactory
//把全部配置檔案中的東西讀出來儲存在map裡面

private mapcontainer = new hashmap();

//定義建構函式

saxbuilder sb = new saxbuilder();

document doc = sb.build(this.getclass().getclassloader()

.getresourceasstream(filename)); //拿到配置檔案

element root = doc.getrootelement();

list list = xpath.selectnodes(root, "/beans/bean");

// 迴圈遍歷節點

for (int i = 0; i < list.size(); i++)

} @override

//呼叫getbean將拿到的資訊返回給客戶

public object getbean(string id) }

c.測試類

public class test 

}

d.結果:

上面簡單的介紹了spring建立bean工廠的原理。事實上bean主要是通過自定義乙個beanfactory工廠的實現,通過建構函式傳入初始值,讀取xml配置檔案資訊。而且將讀取到的id作為key值,讀取到的物件作為value值,存入到map容器中。當client須要獲取時,僅僅要傳入id,就能從容器中讀取出來。 

)容器的基礎。可想而知,理解bean工廠的原理是很有必要的。 

理解Spring的Bean工廠

一提到工廠,我們先來回憶前面學習過的工廠方法和抽象工廠模式 抽象工廠 針對產品系列,可以在謀一系列的產品上進行擴充套件。缺點是如果產生產品新種,改動就會很多。spring工廠 可以在產品系列方面既能擴充套件,又能確定產品品種。下面是spring的例項 1.首先定義乙個介面兩個類 public cla...

Spring中的工廠bean

spring 有兩種型別 bean,一種普通 bean,另外一種工廠 bean factorybean 建立類,讓這個類作為工廠 bean,實現介面 factorybean public class myfactorybean implements factorybean override publ...

spring核心 bean工廠的裝配 1

1.bean factory getstart初時bean工廠 2.bean基礎定義 3.使用建構函式建立bean 4.使用靜態工廠方法建立bean 5.使用非靜態工廠方法建立bean 6.bean的識別符號 7.何時使用singleton 8.設定bean的屬性和協作者 9.bean建構函式選擇決...