常用的对象属性的拷贝方式有很多,就随便说几个:
spring 的 BeanUtils.copyproperties() 原理:反射
apache的 BeanUtils.copyproperties()
String的 BeanUtils.copyproperties()
PropertyUtils.copyproperties()
BeanCopier.create()原理:cglib 利用字节码技术
但是上面几个中,我测试了spring的 BeanUtils.copyproperties() 发现的确很慢,BeanCopier.create()的最快,及什么都不用原始的setXXX重新赋值的3种情况。
测试环境:
测试工具: jmeter
线程数:10
并发时间:1秒内启动10个线程
结束时间:1分钟
第一种:原始的setXXX,主要看Average平均时间
第二种:spring的BeanUtils.copyproperties
第三种:cglib-BeanCopier.create(), 高版本的spring中已经封装了,拿来用就行了
BeanCopier.create()的使用方式:
BeanCopier copier = BeanCopier.create(AddessResolverDto.class, RespFullDcDto.class, false); copier.copy(bullSortingDto, respFullDcDto,null);
总结:
可以看出采用cglib的效率最高