前言
利用工厂模式为程序解耦是在servlet阶段,spring就是类似此方法把对象交给spring创建
在BeanFactory的createObjcet方法里
public static Object createObject(String name)
{
try
{
// 通过传递过来的name获取application.xml中的id对应的值
// 获取到Document对象
SAXReader reader = new SAXReader();
// 加载application.xml文件
InputStream inputStream = BeanFactory.class.getClassLoader().getResourceAsStream("application.xml");
// 读取application.xml流
Document document = reader.read(inputStream);
// 获取根节点beas
Element rooElement = document.getRootElement();
// 通过根节点获取到根节点下所有的子节点bean,返回集合
List<Element> list = rooElement.elements();
// 遍历节点,判断每个元素上的id的值是否和当前的name一致
for (Element el : list)
{
String id = el.attributeValue("id");
if (id.equals(name))
{
String string = el.attributeValue("class");
// 通过反射创建对象并且返回
Class clazz = Class.forName(string);
return clazz.newInstance();
}
}
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
注意application是在src路径下的,这样类加载器才能加载到
直接调用即可