Bean工廠模式筆記

package com.itheima.factory;

/**

* Bean工廠:創(chuàng)建對象

* 步驟:

*? 1. 解析xml,獲取所有對象的全限定類型(全名稱)

*? 2. 反射創(chuàng)建對象,存儲到容器中

*? ? ? 容器:有查找的需求,使用map集合

*? 3. 用戶需要對象時,從容器中根據(jù)id直接獲取

*/

public class BeanFactory {

? ? // String: id , Object : 反射創(chuàng)建好的對象

? ? private static Map<String,Object> map = new HashMap<>();

? ? //靜態(tài)代碼塊:類加載時執(zhí)行,只會執(zhí)行一次

? ? static {

? ? ? ? //解析xml,獲取所有對象的全限定類型(全名稱)

? ? ? ? SAXReader reader = new SAXReader();

? ? ? ? try {

? ? ? ? ? ? //獲取文檔對象

? ? ? ? ? ? Document doc = reader.read(BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml"));

? ? ? ? ? ? //獲取根節(jié)點

? ? ? ? ? ? Element rootElement = doc.getRootElement();

? ? ? ? ? ? //獲取根節(jié)點下的所有的子節(jié)點

? ? ? ? ? ? List<Element> elements = rootElement.elements();

? ? ? ? ? ? //遍歷

? ? ? ? ? ? for (Element element : elements) {

? ? ? ? ? ? ? ? String idValue = element.attributeValue("id");

? ? ? ? ? ? ? ? String classValue = element.attributeValue("class");

? ? ? ? ? ? ? ? //反射創(chuàng)建對象,存儲到容器中

? ? ? ? ? ? ? ? Class clazz = Class.forName(classValue);

? ? ? ? ? ? ? ? Object obj = clazz.newInstance();

? ? ? ? ? ? ? ? //存儲到容器中

? ? ? ? ? ? ? ? map.put(idValue, obj);

? ? ? ? ? ? }

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? }

? ? }


//提供調(diào)用方法

? ? public static Object? getBean(String id){

? ? ? ? return map.get(id);

? ? }

}

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

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