• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • J2EE綜合:如何實現javabean的屬性拷貝

    發表于:2008-07-09來源:作者:點擊數: 標簽:數據庫javabean拷貝getjavaBean
    在struts的實踐過程中,經常兩個 java bean交換數據的情況,如ActionForm與 數據庫 中的表相關的bean交換數據。通常情況下要寫很多get和set語句,一個個屬性依次拷貝。這樣的話,如此重復繁重的工作讓 程序員 感覺不到編程的快樂。于是在網上查相關資料知,在a
    在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
    成功!

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>