import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ApplicationContext {
//缓存spring容器的Bean对象
private Map<String,Object> beans = new HashMap<String, Object>();
/*
* 利用配置文件初始化当前容器
*/
public ApplicationContext( String xml) throws Exception{
//利用dom4j读取xml文件
//解析xml文件得到bean类名和bean的id
//从Resource(classpath)中读取流
InputStream in = getClass().getClassLoader().getResourceAsStream(xml);
SAXReader reader = new SAXReader();
Document doc = reader.read(in);
in.close();
//解析xml <beans><bean>...
Element root =doc.getRootElement();
//读取根元素中全部的bean子元素
List<Element> list = root.elements("bean");
for (Element e:list) {
//e就是bean元素 id属性 class属性
String id = e.attributeValue("id");
String className = e.attributeValue("class");
//动态加载类动态创建对象
Class cls = Class.forName(className);
Object object = cls.newInstance();
beans.put(id,object);
}
}
public Object getBean(String id){
//根据id在map中查找对象,并返回对象
return beans.get(id);
}
//泛型方法:优点可以减少一次类型转换
public<T> T getBean(String id,Class<T> cls){
return (T)beans.get(id);
}
}