Java对象复制类库性能对比
背景
在开发中我们经常会用到对象之间的互相拷贝,Java中对象拷贝的类库也比较多,常见的有Spring BeanUtils,Apache BeanUtils,等并且在很多大厂公司对对象拷贝也有详尽的说明,避免大家踩坑。
功能对比
| 耗时(毫秒) | 1000次 | 10,000次 | 100,100次 | 
|---|---|---|---|
Apache BeanUtils | 
298 | 983 | 4211 | 
Cglib BeanCopier | 
89 | 120 | 203 | 
Spring BeanUtils | 
92 | 160 | 524 | 
性能对比
| Apache BeanUtils | Cglib BeanCopier | Spring BeanUtils | |
|---|---|---|---|
| 非public类 | 不支持 | 支持 | 支持 | 
| 基本类型与装箱类型,int->Integer,Integer->int | 支持,可以copy | 不支持,不copy | 不支持,不copy | 
| int->long,long->int,int->Long,Integer->long | 不支持 | 不支持 | 不支持 | 
| 源对象相同属性无get方法 | 不支持 不copy | 不支持 不copy | 不支持 不copy | 
| 目标对象相同属性无get方法 | 支持 | 不支持 | 支持 | 
| 目标对象相同属性无set方法 | 不copy,不报错 | 报错 | 不copy,不报错 | 
| 源对象相同属性无set方法 | 支持 | 支持 | 支持 | 
| 目标对象相同属性set方法返回非void | 不设置,其他正常属性可以copy | 不设置,导致其他属性都无法copy | 支持,能够copy | 
| 目标对象多字段 | 支持 | 支持 | 支持 | 
| 目标对象少字段 | 支持 | 支持 | 支持 | 
结论
从性能对比来看:
cglib的BeanCopier最好,Spring BeanUtils稍微差点,但也还可以,Apache BeanUtils性能最差- 从功能对比来看,
cglib在set方法返回非void时,会导致其他属性无法copy,目标没有set方法时,会报错,还存在并且有多项不支持的情况 
    