BeanCopy几种实现的比较

 

Bean复制的几种框架性能比较

Apache BeanUtilsPropertyUtils,Spring BeanUtils,Cglib BeanCopier

       一个FromBean和一个ToBean,两个的代码基本上一样,除了类名称不一样,所以只是贴出来了一份。

 

public class FromBean {

    private String name;

    private int age;

    private String address;

    private String idno;

    private double money;

 

         省略getset方法……

}

 

  一个用于测试的BenchmarkTest类,为了减少重复代码,写了一个策略模式

 BeanCopy几种实现的比较_第1张图片

 策略中使用的接口声明

BeanCopy几种实现的比较_第2张图片

使用的测试类

BeanCopy几种实现的比较_第3张图片

BeanCopy几种实现的比较_第4张图片

 

BeanCopy几种实现的比较_第5张图片

BeanCopy几种实现的比较_第6张图片

进行了三次测试,最后的结果如下:

 BeanCopy几种实现的比较_第7张图片

 

  1. 从整体的表现来看,CglibBeanCopier的性能是最好的无论是数量较大的1万次的测试,还是数量较少10次,几乎都是趋近与零损耗,
  2. Spring是在次数增多的情况下,性能较好,在数据较少的时候,性能比PropertyUtils的性能差一些。
  3. PropertyUtils的性能相对稳定,表现是呈现线性增长的趋势。而ApacheBeanUtil的性能最差,无论是单次Copy还是大数量的多次Copy性能都不是很好。
  4. PropertyUtils和BeanUtils的功能基本一致,唯一的区别是:BeanUtils在对Bean赋值时会进行类型转化,而PropertyUtils不会对类型进行转化,如果类型不同则会抛出异常!,这可以解释PropertyUtils效率比BeanUtils要高的原因。
  5. 建议:基本类型在源目标类型一致的情况下使用: PropertyUtils效率会更高。
  6. Dozer框架的拷贝,万次内的效率beanutils比dozer要快, 十万次以上的效率beanutils的效率和dozer差不多, 复杂类型的拷贝可以使用: Dozer

 

 

 

你可能感兴趣的:(项目实践遇到的问题)