快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

利用反射从XML构造VO


    反射使您的程序代码能够接入装载到 JVM 中的类的内部信息,答应你编写与执行时,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。        首先观察下面的 XML 文件:

 <?xml version = \\\'1.0\\\' encoding = \\\'gb2312\\\'?><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 也提供了类似的功能。那么本文就作为一个了解反射的范例罢了。




返回类别: 教程
上一教程: Javamail中的常见中文乱码问题与解决办法(综合)
下一教程: 关于如何使用struts标签输出值为map的list

您可以阅读与"利用反射从XML构造VO"相关的教程:
· 利用XMLBuddy在Eclipse中开发XML
· 利用Java Reflection(反射)原理,在hibernate里面实现对单表、视图的动态组合查询
· 利用xml+xsl迅速生成大量JSP的常用代码的方式.
· 利用JAVABEAN轻松实现对数据库的连接、查询以及增删改--使用范例
· XML 和 Java:一个强盛的组合
    微笑服务 优质保证 索取样品