程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> J2EE綜合:如何實現javabean的屬性拷貝

J2EE綜合:如何實現javabean的屬性拷貝

編輯:JAVA編程入門知識
在struts的實踐過程中,經常兩個javabean交換數據的情況,如ActionForm與數據庫中的表相關的bean交換數據。通常情況下要寫很多get和set語句,一個個屬性依次拷貝。這樣的話,如此重復繁重的工作讓程序員感覺不到編程的快樂。於是在網上查相關資料知,在apache.org有一個project:common-beanutil,提供的一個BeanUtil類,這個類有一個靜態方法BeanUtil.copyProperties()實現了該功能。後來我在與java相關的書上知道的java的反射機制(reflect),償試著並實現了兩個javabean的屬性拷貝功能。
  import java.lang.reflect.*;
  /**
  @author Xiaobo Zheng
  @date 2005-12-28
  */
  public class BeanUtil2{
         /**
         @parameter Object obj1,Object obj2
         @return Object
         用到反射機制
         此方法將調用obj1的getter方法,將得到的值作為相應的參數傳給obj2的setter方法
         注意,obj1的getter方法和obj2方法必須是public類型
         */
         public static Object CopyBeanToBean(Object obj1,Object obj2) throws Exception{
                Method[] method1=obj1.getClass().getMethods();
                Method[] method2=obj2.getClass().getMethods();
                String methodName1;
                String methodFix1;
                String methodName2;
                String methodFix2;
                for(int i=0;i                       methodName1=method1[i].getName();
                       methodFix1=methodName1.substring(3,methodName1.length());
                       if(methodName1.startsWith("get")){
                              for(int j=0;j                                     methodName2=method2[j].getName();
                                     methodFix2=methodName2.substring(3,methodName2.length());
                                     if(methodName2.startsWith("set")){
                                            if(methodFix2.equals(methodFix1)){
                                                   Object[] objs1=new Object[0];
                                                   Object[] objs2=new Object[1];
                                                   objs2[0]=method1[i].invoke(obj1,objs1);//激活obj1的相應的get的方法,objs1數組存放調用該方法的參數,此例中沒有參數,該數組的長度為0
                                                   method2[j].invoke(obj2,objs2);//激活obj2的相應的set的方法,objs2數組存放調用該方法的參數
                                                   continue;                                    
                                            }
                                     }
                              }
                       }
                }
                return obj2;
         }
  }
  再建一個javabean,並測試
  import java.lang.reflect.*;
  public class User {
      private String name;
      private String id;  
      public void setName(String name){
          this.name=name;
      }
      public String getName(){
          return this.name;
      }
      public void setId(String id){
          this.id=id;
      }
      public String getId(){
          return this.id;
      }
      public static void main(String[] args) throws Exception{
          User u1=new User();
          u1.setName("zxb");
          u1.setId("3286");
          User u2=new User();
          u2=(User)BeanUtil2.CopyBeanToBean(u1,u2);
          System.out.println(u2.getName());
          System.out.println(u2.getId());           
      }
  }
  編譯後並執行輸出結果
  zxb
  3286
  成功!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved