class DateUtils{
/**通过类中的静态方法创建一个对象*/
public static Date getInstance(){
return new Date();
}
}
public class TestFactoryDemo01 {
public static void main(String[] args) {
//1.直接创建对象(编译阶段确定)
Date date1=new Date();
//2.通过静态工厂创建
Date date2=DateUtils.getInstance();
//3.通过动态工厂创建对象(
//根据配置信息与反射创建对象)
//3.1.创建工厂对象
ApplicationContext ctx=
new ApplicationContext("beans.xml");
//3.2.通过工厂对象,获取我们的对象
Date date3=(Date)ctx.getBean("date1");
Date date4=(Date)ctx.getBean("date2");
//3.3.使用对象
System.out.println(date3);
System.out.println(date4);
//3.4.关闭工厂对象,释放资源
ctx.close();
}
xml-apis-1.0.b2.jar
dom4j-1.6.jar
public class ApplicationContext {
private static Map<String, Object> beanMap = new HashMap<String, Object>();
public ApplicationContext(String file) {
init(file);
}
/** 初始化对象,然后存储到map */
private void init(String file) {// beans.xml
// 1.读取文件
InputStream in = getClass().getClassLoader().getResourceAsStream(file);
// 推荐(直接从类路径下读取)
// 2.解析文件(重点dom4j解析,了解 DOM解析,SAX,PULL)
// 2.1创建解析器对象
SAXReader sr = new SAXReader();
// 2.2读取数据
Document doc = null;
try {
doc = sr.read(in);
} catch (DocumentException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
// 2.3获取根元素
Element root = doc.getRootElement();
// 2.4获取根元素中的所有bean元素
List<Element> list = root.elements("bean");
// 2.5迭代所有bean元素
for (Element e : list) {
String idValue = e.attributeValue("id");
String clsValue = e.attributeValue("class");
Object obj = null;
// 3.创建对象
try {
obj = Class.forName(clsValue).newInstance();
} catch (Exception e1) {
throw new RuntimeException(e1);
}
// 4.存储对象
beanMap.put(idValue, obj);
}
}
/** 从map中获取对象 */
public Object getBean(String key) {
return beanMap.get(key);
}
/** 释放资源 */
public void close() {
beanMap.clear();
beanMap = null;
}