package com.itheima.factory;
/**
* Bean工厂:创建对象
* 步骤:
* 1. 解析xml,获取所有对象的全限定类型(全名称)
* 2. 反射创建对象,存储到容器中
* 容器:有查找的需求,使用map集合
* 3. 用户需要对象时,从容器中根据id直接获取
*/
public class BeanFactory {
// String: id , Object : 反射创建好的对象
private static Map<String,Object> map = new HashMap<>();
//静态代码块:类加载时执行,只会执行一次
static {
//解析xml,获取所有对象的全限定类型(全名称)
SAXReader reader = new SAXReader();
try {
//获取文档对象
Document doc = reader.read(BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml"));
//获取根节点
Element rootElement = doc.getRootElement();
//获取根节点下的所有的子节点
List<Element> elements = rootElement.elements();
//遍历
for (Element element : elements) {
String idValue = element.attributeValue("id");
String classValue = element.attributeValue("class");
//反射创建对象,存储到容器中
Class clazz = Class.forName(classValue);
Object obj = clazz.newInstance();
//存储到容器中
map.put(idValue, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//提供调用方法
public static Object getBean(String id){
return map.get(id);
}
}