天天看點

java對象拷貝——PropertyUtils.copyProperties()用法和性能

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