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

如何實現javabean的屬性拷貝

編輯:關於JAVA

在struts的實踐過程中,經常兩個javabean交換數據的情況,如ActionForm與數據庫中的表相關的bean交換數據。通常情況下要寫很多get和set語句,一個個屬性依次拷貝。這樣的話,如此重復繁重的工作讓程序員感覺不到編程的快樂。於是在網上查相關資料知,在apache.org有一個project:common-beanutil,提供的一個BeanUtil類,這個類有一個靜態方法BeanUtil.copyPropertIEs()實現了該功能。後來我在與java相關的書上知道的java的反射機制(reflect),償試著並實現了兩個Javabean的屬性拷貝功能。

import Java.lang.reflect.*;

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