目录
任务描述
本关任务:使用反射和Dom4j从xml
文档中获取Student
类。
相关知识
为了完成本关任务,你需要掌握:使用反射来创建对象。
反射创建对象
通过反射创建对象有两步操作,如下:
-
通过静态方法
Class.forName("全类名")
获取类名对应的Class
对象。public static Class<?> forName(String className) throws ClassNotFoundException
-
创建该类型的对象
public T newInstance()throws InstantiationException,IllegalAccessException
示例:
beans.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<!-- class用来配置类的全路径 -->
<bean class="com.educoder.entity.MyObj"></bean>
</beans>
在xml
文档中我们配置了类的全路径,就可以通过反射机制来获取对象了:
-
获取配置文件中类的全路径
try { Document doc=new SAXReader().read("beans.xml"); Element elm = doc.getRootElement().element("bean"); //获取beans.xml文档中class属性中的内容 也就是类的全类名 String className = elm.attributeValue("class"); } catch (DocumentException e) { e.printStackT\frace(); }
-
通过全路径获取对象
Class clazz = null; try { clazz = Class.forName(className); MyObj obj = (MyObj) clazz.newInstance(); } catch(Exception e) { e.printStackT\frace(); }
编程要求
在右侧编辑器中补充代码,使用反射和Dom4j从xml
文档中完成获取Student
类:
-
配置
step2/beans.xml
文档; -
在
step2/Task.java
类中完成解析beans.xml
文档并获取Student
对象的getStu
方法。
注意:beans.xml
路径为src/step2/beans.xml
测试说明
完成编程要求后无需你调用方法,平台会对你编写的代码进行测试:
预期输出:Student类被成功获取
开始你的任务吧,祝你成功!
参考答案
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<!-- 配置bean -->
<bean class="step2.Student"></bean>
</beans>
Task.java
package step2;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Task {
/**
* 获取Student对象(注意抛出异常)
* @return
*/
public Student getStu(){
Student stu=null;
/*********** Begin ***********/
try{
Document doc = new SAXReader().read("src/step2/beans.xml");
Element elm = doc.getRootElement().element("bean");
String className = elm.attributeValue("class");
Class clazz = null;
try {
clazz = Class.forName(className);
stu = (Student) clazz.newInstance();
} catch(Exception e) {
e.printStackTrace();
}
}catch(DocumentException e){
e.printStackTrace();
}
/*********** End ***********/
return stu;
}
}