Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
一个FromBean和一个ToBean,两个的代码基本上一样,除了类名称不一样,所以只是贴出来了一份。
public class FromBean {
private String name;
private int age;
private String address;
private String idno;
private double money;
省略get和set方法……
}
一个用于测试的BenchmarkTest类,为了减少重复代码,写了一个策略模式
策略中使用的接口声明
使用的测试类
进行了三次测试,最后的结果如下:
- 从整体的表现来看,Cglib的BeanCopier的性能是最好的无论是数量较大的1万次的测试,还是数量较少10次,几乎都是趋近与零损耗,
- Spring是在次数增多的情况下,性能较好,在数据较少的时候,性能比PropertyUtils的性能差一些。
- PropertyUtils的性能相对稳定,表现是呈现线性增长的趋势。而Apache的BeanUtil的性能最差,无论是单次Copy还是大数量的多次Copy性能都不是很好。
- PropertyUtils和BeanUtils的功能基本一致,唯一的区别是:BeanUtils在对Bean赋值时会进行类型转化,而PropertyUtils不会对类型进行转化,如果类型不同则会抛出异常!,这可以解释PropertyUtils效率比BeanUtils要高的原因。
- 建议:基本类型在源目标类型一致的情况下使用: PropertyUtils效率会更高。
- Dozer框架的拷贝,万次内的效率beanutils比dozer要快, 十万次以上的效率beanutils的效率和dozer差不多, 复杂类型的拷贝可以使用: Dozer