項目中經常會用到對象拷貝,對於淺拷貝,一般讓對象實現Cloneable 接口即可,對於深度拷貝,在工作中用到過以下組件。現簡要說明如下。
組件名稱 | 組件源 | 性能 | 拷貝原理 | 能否對不同屬性名映射 | 其他特性 | |
BeanUtils | spring | 相對較低 | 反射 | 否 | 支持名稱相同但類型不同的屬性的轉換 | |
BeanUtils | apache | 相對較低 | 反射 | 否 | 支持只匹配相同名稱屬性,不同屬性不進行拷貝 | |
BeanCopier | cglib | 較高 | ASM字節碼生成class對象 | 否 | ||
Dozer | net.sf.dozer | 較低 | 底層用反射進行屬性映射 | 是 | xml 定製化屬性映射 | |
Orika | ma.glasnost.orika | 較高 | 採用javassist生成字節碼對象 | 是 |
代碼中直接進行不同名稱屬性映射,特性更豐富,代碼靈活性更高
|
補充:
偶然發現還有效率更高的工具,之後再細作研究吧
Jmapper: google 工具包
MapStruct:
Selma: