zoukankan      html  css  js  c++  java
  • 读配置文件操作对象

    前面学习了反射知识和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类型的数据。




  • 相关阅读:
    常见错误3——错误2 error C2143: 语法错误 : 缺少“;”(在“}”的前面)
    MFC DLL封装窗体详细步骤
    指针函数与函数指针的区别
    DOM
    BOM
    JS动态创建元素
    JS节点
    事件和节点部分总结
    DOM基础
    自定义对象
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5276132.html
Copyright © 2011-2022 走看看