利用反射从 XML 构造 VO
来源:互联网 发布:flotherm软件破解 编辑:程序博客网 时间:2024/04/30 21:46
反射使您的程序代码能够接入装载到 JVM 中的类的内部信息,允许你编写与执行时,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。
首先观察下面的 XML 文件:
<ROOT>
<ARSUBITEM num="1">
<C_ITEMNO>300200500009</C_ITEMNO>
<C_ITEMNAME>20050112测试</C_ITEMNAME>
<C_SUBITEMNO>200543030000010</C_SUBITEMNO>
<C_SUBITEMNAME>20010112标段2</C_SUBITEMNAME>
<C_FUNCNAME>监督备案</C_FUNCNAME>
</ARSUBITEM>
</ROOT>
该 XML 文件描述了一个标段当前流程信息,接下来把它翻译成 VO :
public class BidProcess implements Serializable{
private String itemNo;
private String itemName;
private String subItemNo;
private String subItemName;
private String functionName;
/**
* @return 返回 functionName。
*/
public String getFunctionName() {
return functionName;
}
/**
* @param functionName 要设置的 functionName。
*/
public void setFunctionName(String functionName) {
this.functionName = functionName;
}
/**
* @return 返回 itemName。
*/
public String getItemName() {
return itemName;
}
/**
* @param itemName 要设置的 itemName。
*/
public void setItemName(String itemName) {
this.itemName = itemName;
}
/**
* @return 返回 itemNo。
*/
public String getItemNo() {
return itemNo;
}
/**
* @param itemNo 要设置的 itemNo。
*/
public void setItemNo(String itemNo) {
this.itemNo = itemNo;
}
/**
* @return 返回 subItemName。
*/
public String getSubItemName() {
return subItemName;
}
/**
* @param subItemName 要设置的 subItemName。
*/
public void setSubItemName(String subItemName) {
this.subItemName = subItemName;
}
/**
* @return 返回 subItemNo。
*/
public String getSubItemNo() {
return subItemNo;
}
/**
* @param subItemNo 要设置的 subItemNo。
*/
public void setSubItemNo(String subItemNo) {
this.subItemNo = subItemNo;
}
}
从 XML 构造 VO ,放入 List 中,代码如下:
public class VOFactory {
// 构造出的对象集合
private ArrayList list=new ArrayList();
/** 利用反射获取结果集 */
public List parse(Serializable source, String xml){
try{
//构造 XML 输入流
ByteArrayInputStream ba=new ByteArrayInputStream(xml.getBytes());
//Dom4J 初始化
SAXReader reader = new SAXReader();
Document document = reader.read(ba);
Element root = document.getRootElement();
//获得类对象
Class c = source.getClass();
//获得构造函数
Constructor[] cons=c.getDeclaredConstructors();
Constructor con=cons[0];
//获得类中的字段
Field[] fields = c.getDeclaredFields();
//设置访问private字段的权限
AccessibleObject.setAccessible(fields,true);
//以特定名称获得 XML 元素列表
List lis = root.elements("ARSUBITEM");
//"ARSUBITEM"元素下的子元素
for(int i=0;i<lis.size();i++){
Element element=(Element)lis.get(i);
Iterator iter=element.elementIterator();
//从构造函数实例化对象
Serializable localObj=(Serializable)con.newInstance(null);
//按照字段个数循环
int j=0;
while(iter.hasNext()){
Element e=(Element)iter.next();
fields[j].set(localObj,e.getText());
j++;
}
list.add(localObj);
}
}catch(Exception e){
e.printStackTrace();
}
return list;
}
}
通过对以上代码原形进行修改,可实现分页、结果集嵌套等需求。在写作本文时,我偶然发现了 Jakarta Commons BeanUtils 也提供了类似的功能。那么本文就作为一个了解反射的范例罢了。
(请注意!引用、转贴本文应注明原作者:Rosen Jiang 以及出处:http://blog.csdn.net/rosen)
- 利用反射从 XML 构造 VO
- 利用反射构造工厂
- <码农进阶> 利用反射封装Map成Vo
- 利用fastjson和反射实现为VO属性赋值
- 利用类反射构造新的对象
- Java 利用反射构造私有数据类型
- 测试私有构造器--利用反射
- 利用反射机制实现XML-RPC
- 利用反射机制实现XML-RPC
- 利用java反射读取xml配置文件
- 利用反射和递归生成xml元素
- 利用Java反射机制拼接xml
- 利用XML文件进行类的反射
- VO to XML converter
- xml 转 VO
- Category (xml,vo)
- CategorySecond (vo,xml)
- product (vo,xml)
- FEEL之旅
- 使用Repeater的Template
- 嵌入式Linux发展现状
- 十年MFC经历认识的Microsoft技术[收藏]
- 提高JBuilder开发WEB层的效率
- 利用反射从 XML 构造 VO
- COM 经验的八个教训(8):共享对象并不容易
- 同学录班级指导方针:)
- VC编程规范
- Postfix+Cyrus-IMAP + Cyrus-SASL + MySQL + IMP 配置指南
- 华为编程规范和范例
- [转]电脑操作最忌讳的18个小动作
- 用JavaBean实现文件上载
- JSP技巧:发送动态图像