天天看点

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