一
提到工廠,我們先來回顧前面學習過的工廠方法和抽象工廠模式:
工廠方法:針對產品維度,能夠產生新的產品,也能夠產生新的產品工廠,既能夠擴充套件產品維度。
可是假設我們想在普通工廠上生產產品系列,就會特別麻煩
假設產生
你就得產生
,假設產生
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建構函式選擇決...