读配置文件操作对象

简介:

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






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5276132.html,如需转载请自行联系原作者
相关文章
|
存储 Kubernetes Linux
helm 简介及基本使用
helm 简介及基本使用
3574 0
helm 简介及基本使用
|
弹性计算 人工智能 安全
阿里云弹性计算:助力企业实现灵活扩展与高效计算
【10月更文挑战第6天】在现代企业的数字化转型中,云计算已经成为不可或缺的技术基础。阿里云弹性计算(Elastic Compute Service, ECS)凭借其强大的弹性伸缩能力、高可用性和灵活性,帮助企业在云端实现高效的业务运营和资源管理。本文将探讨阿里云弹性计算的主要功能、技术优势以及在各行业中的应用场景。
651 7
|
12月前
|
索引 API
鸿蒙开发:ForEach中为什么键值生成函数很重要
在列表组件使用的时候,如List、Grid、WaterFlow等,循环渲染时都会使用到ForEach或者LazyForEach,当然了,也有单独使用的场景,如下,一个很简单的列表组件使用,这种使用方式,在官方的很多案例中也多次出现,相信在实际的开发中多多少少也会存在。
246 8
鸿蒙开发:ForEach中为什么键值生成函数很重要
|
JavaScript 前端开发 中间件
Express 框架介绍
Express 框架介绍
U盘复制文件到最后5秒会卡住怎么办解决
现在的U盘容量已经非常大了,一般都有16G以上,为了能放单文件大于4G的数据大多数时候我们都是把U盘格式化为ntfs格式的,所以会出现不管是大文件还是小文件,当你往U盘里复制文件或者使用发送到U盘功能的时候会出现一个怪现象,那就是不管U盘速度如何,都会在前部分拷贝的时候速度非常快,基本上达到U盘的正常速度,但当到达100%的时候就会卡住好久,短的5秒,慢的几分钟才会显示复制完成。
8431 0
|
传感器 开发框架 JavaScript
HaaS EDU K1全流程体验阿里云物联网平台开发
最近入手了新玩具 HaaS EDU K1,它丰富的传感器支持、支持python和js语言的轻应用开发非常吸引我,得益于HaaS云端一体开发框架,我这种非嵌入式开发出身的小白也能够体验物联网平台开发的魅力。今天结合官方案例体验阿里云物联网平台开发。
1338 17
HaaS EDU K1全流程体验阿里云物联网平台开发
|
存储 域名解析 Prometheus
K8S原理剖析:Pod、工作负载与服务
K8S原理剖析:Pod、工作负载与服务
K8S原理剖析:Pod、工作负载与服务
|
物联网 数据管理 数据安全/隐私保护
AliOS Things 网络篇之 Wi-Fi 基础知识与连接过程|学习笔记
快速学习 AliOS Things 网络篇之 Wi-Fi 基础知识与连接过程。
908 0
AliOS Things 网络篇之 Wi-Fi 基础知识与连接过程|学习笔记
|
NoSQL Redis 开发者
数据类型-案例:微信接收消息顺序控制| 学习笔记
快速学习数据类型-案例:微信接收消息顺序控制
数据类型-案例:微信接收消息顺序控制| 学习笔记
如何获取用户user_id以及user_id,pid,支付宝账号三者之间的关系
一、如何获取用户user_id   user_id的获取方法一般有两种:一种是通过调用接口交易成功后的异步通知来获取,一种是使用授权功能来获取   1、通过异步通知来获取   用户调用支付接口支付成功商户可以通过配置异步地址notify_url来接收异步参数,在异步参数中返回的有buyer_id(...
5454 12