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