Java开发笔记 — 反射、dom4j、xpath的综合小应用

来源:百度文库 编辑:神马文学网 时间:2024/04/19 18:42:53

设计目的:使用dom4j读出xml格式的配置文件,然后根据配置文件的信息,反射出一个已经编写好的类。
配置文件如下:

XML语言: Properties.xml01
02
03
04 com.openwudi.excise.ReflectDom4j.A
05
06 show
07
08 java.lang.String
09 hello,world!
10

11

12

13

将要被反射的类:

Java语言: A.java1 package com.openwudi.excise.ReflectDom4j;
2
3 public class A {
4     public void show(String s){
5         System.out.println(s);
6     }
7 }

主程序:使用了传统的dom4j和xpath两种不同的方式读取xml配置文件。

Java语言: ReflectFromXML.java01 package com.openwudi.excise.ReflectDom4j;
02
03 import java.io.File;
04 import java.lang.reflect.Method;
05
06 import org.dom4j.Document;
07 import org.dom4j.Element;
08 import org.dom4j.io.SAXReader;
09
10 public class ReflectFromXML {
11     static String clazzName;
12     static String methodName;
13     static String methodPara;
14     static String methodParaValue;
15     /**
16      * @author WuDi
17      */
18     public static void main(String[] args) throws Exception {
19         SAXReader reader = new SAXReader();
20         Document doc = reader.read(new File("src/Properties.xml"));
21         //读取配置信息
22         //getClazz(doc);
23         getClazzByXpath(doc);
24         //反射出A类
25         reflectA();
26     }
27    
28     //反射出A类
29     private static void reflectA() throws Exception {
30         Class clazzA = Class.forName(clazzName);
31         Method showMethod = clazzA.getMethod(methodName, Class.forName(methodPara));
32         showMethod.invoke(clazzA.newInstance(),methodParaValue);
33     }
34
35     //得到XML配置信息
36     private static void getClazz(Document doc) {
37         Element rootE = doc.getRootElement();
38         Element clazzE = rootE.element("class");
39         Element clazzNameE = clazzE.element("name");
40         clazzName = clazzNameE.getText();
41         Element methodE = clazzE.element("method");
42         Element methodNameE = methodE.element("name");
43         methodName = methodNameE.getText();
44         Element methodparameterE = methodE.element("parameter");
45         Element methodParaTypeE = methodparameterE.element("para-type");
46         Element methodParavValueE = methodparameterE.element("para-value");
47         methodPara = methodParaTypeE.getText();
48         methodParaValue = methodParavValueE.getText();
49     }
50    
51     //用xpath得到XML配置信息
52     private static void getClazzByXpath(Document doc) {
53         Element clazzNameE = (Element) doc.selectSingleNode("/classes/class/name");
54         clazzName = clazzNameE.getText();
55         Element methodNameE = (Element) doc.selectSingleNode("/classes/class/method/name");
56         methodName = methodNameE.getText();
57         Element methodParaTypeE =(Element) doc.selectSingleNode("/classes/class/method/parameter/para-type");
58         Element methodParavValueE = (Element) doc.selectSingleNode("/classes/class/method/parameter/para-value");
59         methodPara = methodParaTypeE.getText();
60         methodParaValue = methodParavValueE.getText();
61     }
62
63 }