beanutils提供對java反射和自省api的包裝。其主要目的是利用反射機制對javabean的屬性進行處理。一個javabean通常包含了大量的屬性,很多情況下,對javabean的處理導緻大量get/set代碼堆積,增加了代碼長度和閱讀代碼的難度。
使用propertyutils.copyproperties()拷貝一個bean中的屬性到另一個bean中,第一個參數是目标bean,第二個參數是源bean。
例一
book srcbook = new book();
srcbook.setname("java");
book destbook = new book();
propertyutils.copyproperties(destbook, srcbook);
system.out.println(destbook.getname());
例二(對删除的資料進行備份)
student s = new student();
s.setname("xy")
................
studentbak sbak = new studentbak();
propertyutils.copyproperties(sbak , s);
studentbakdao.save(sbak);
studentdao.delete(s);
沒有propertyutils.copyproperties,我們隻能
sbak.setname(s.getname);
.........................
如果有是十個屬性,我們不是累呆了。
該方法做對象的拷貝很友善,但是它的性能問題相當差
看下面的測試代碼:
public class a
{
private string name;
public string getname()
return name;
}
public void setname(string name)
this.name = name;
import org.apache.commons.beanutils.propertyutils;
public class propertyutilstest
public static void main(string []args)
普通的copy,每個字段拷貝
a a1 = new a();
a1.setname("wang");
a a2 = new a();
long b = new java.util.date().gettime();
a2.setname(a1.getname());
long e = new java.util.date().gettime();
system.out.println("time1="+(e-b));
try
propertyutils.copyproperties方法copy
a a3 = new a();
b = new java.util.date().gettime();
propertyutils.copyproperties(a3, a1);
e = new java.util.date().gettime();
system.out.println("time2="+(e-b));
catch (exception e1)
e1.printstacktrace();
最後輸出:
time1=0
time2=265
兩種方法時間差那麼多!
原帖位址:http://hi.baidu.com/dobodo/blog/item/f741897be7a0a1f80bd187ef.html