打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

XML语言: Properties.xml
01 <?xml version="1.0" encoding=”UTF-8″?>
02 <classes>
03 <class>
04 <name>com.openwudi.excise.ReflectDom4j.A</name>
05 <method>
06 <name>show</name>
07 <parameter>
08 <para-type>java.lang.String</para-type>
09 <para-value>hello,world!</para-value>
10 </parameter>
11 </method>
12 </class>
13 </classes>

将要被反射的类:

Java语言: A.java
1 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.java
01 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 }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用dom4j读取xml文档的四种方式
Dom4j节点处理器的实现
Java程序员从笨鸟到菜鸟之(二十七)XML之Jdom和DOM4J解析
转贴 java对xml操作--秋剪梧桐
构建ApplicationContext对象 * 时,读取指定的文件(xml)
Dom4j解析和生成XML文档
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服