项目中经常会用到对象拷贝,对于浅拷贝,一般让对象实现Cloneable 接口即可,对于深度拷贝,在工作中用到过以下组件。现简要说明如下。
组件名称 | 组件源 | 性能 | 拷贝原理 | 能否对不同属性名映射 | 其他特性 | |
BeanUtils | spring | 相对较低 | 反射 | 否 | 支持名称相同但类型不同的属性的转换 | |
BeanUtils | apache | 相对较低 | 反射 | 否 | 支持只匹配相同名称属性,不同属性不进行拷贝 | |
BeanCopier | cglib | 较高 | ASM字节码生成class对象 | 否 | ||
Dozer | net.sf.dozer | 较低 | 底层用反射进行属性映射 | 是 | xml 定制化属性映射 | |
Orika | ma.glasnost.orika | 较高 | 采用javassist生成字节码对象 | 是 | 代码中直接进行不同名称属性映射,特性更丰富,代码灵活性更高
|
补充:
偶然发现还有效率更高的工具,之后再细作研究吧
Jmapper: google 工具包
MapStruct:
Selma: