读配置文件操作对象

前面学习了反射知识和xml文件的dom4j解析方法,下面的一个小案例就是综合了两种知识的运用:

package cn.wwh.www.xml.do4j.exmple;

/**
*类的作用:
*
*
*@author 一叶扁舟
*@version 1.0
*@创建时间: 2014-7-23 上午10:43:00
*/
public class Student {


private String name ;
private int age;
public Student(){}


public Student(String name,int age) {
super();
this.name = name;
this.age = age;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}

public void eat(String name,Integer age){
System.out.println(name+"今年"+age+"岁");
System.out.println("他是一个很能吃的小伙子!");
}

public void run(String name){
System.out.println(name+"喜欢运动");
}
}


文件中包含类的信息(student.xml):

<?xml version="1.0" encoding="UTF-8"?>
<root>
<student>
<className>cn.wwh.www.xml.do4j.exmple.Student</className>
<methodName>eat</methodName>
<argNameType>java.lang.String</argNameType>
<argNameValue>一叶扁舟</argNameValue>
<argAgeType>java.lang.Integer</argAgeType>
<argAgeValue>22</argAgeValue>
</student>
</root>


程序主代码(Dom4jParseConfig .java):

package cn.wwh.www.xml.do4j.exmple;

import java.lang.reflect.Method;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

/**
*类的作用:
*从配置文件中解析出来数据,然后利用反射,实现对对象的操作
*
*
*@author 一叶扁舟
*@version 1.0
*@创建时间: 2014-7-23 上午10:42:33
*/
public class Dom4jParseConfig {
private String filePath = "src/cn/wwh/www/xml/do4j/exmple/student.xml";
@Test
public void testDemo() throws Exception{
// 利用dom4ji解析配置文件
SAXReader reader = new SAXReader();
Document document = reader.read(filePath);
String className = document.selectSingleNode("//className").getText();
String methodName = document.selectSingleNode("//methodName").getText();
String argNameType = document.selectSingleNode("//argNameType").getText();
String argNameValue = document.selectSingleNode("//argNameValue").getText();
String argAgeType = document.selectSingleNode("//argAgeType").getText();
String argAgeValue = document.selectSingleNode("//argAgeValue").getText();

// 利用反射,获取对象
Class clazz = Class.forName(className);
// 获取方法
Method method = clazz.getMethod(methodName,Class.forName(argNameType),

Class.forName(argAgeType));
method.invoke(clazz.newInstance(),argNameValue,Integer.parseInt(argAgeValue));
}
}

输出结果:

一叶扁舟今年22岁
他是一个很能吃的小伙子!



注意:1.在clazz.getMethod(,)中后两个参数应该是class类型,因为argNameType类型为String类型,要将argNameType中的数据“java.lang.String”用Class.forName()转成class类型

2.eat(String,Integer)中的第二个参数应该是int类型,但是int.class为int,测试代码中是无法转换的,所以只能采用Integer类型,则在xml文件中他的类型就为:java.lang.Integer,这样就通过了。

3.document.selectSingleNode("//argAgeValue").getText();的返回值是String类型,所以在invoke()调用时要将这个String类型转换成Int类型的数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇