xml+dom4j+反射–实现接口解耦(模拟框架创建实例原理)
public class BeanFactory {
public static Object newInstance(String id) throws Exception {
// 创建xml解析器
SAXReader sax = new SAXReader();
// 读取注册文件
Document document = sax.read("exercise\src\xiaobai\beans.xml");
// 读取beans.xml文件中id是所传入的类名的bean元素
Element element = (Element) document.selectSingleNode("//bean[@id=" + id + "]");
// 获取bean元素的属性值class
String className = element.attributeValue("class");
// 根据class的属性值,使用反射技术,获取class文件对象
Class clazz = Class.forName(className);
// 使用class文件对象中的方法newInstance实例化对象
Object obj = clazz.newInstance();
// 返回对象
return obj;
}
}
public class Student {
public void study() {
System.out.println("学生学习");
}
}
public class Teacher {
public void teach() {
System.out.println("教师教学");
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<beans>
<bean id="student" class="xiaobai.Student"/>
<bean id="teacher" class="xiaobai.Teacher"/>
</beans>