一、簡介
BeanUtils提供對Java反射和自省API的包裝。其主要目的是利用反射機制對JavaBean的屬性進行處理。我們知道,一個JavaBean通常包含了大量的屬性,很多情況下,對javaBean的處理導致大量get/set代碼堆積,增加了代碼長度和閱讀代碼的難度。
二、功能
1.spring的BeanUtils.copyProperties(obj1, obj2) 的方法
將obj1 的屬性值 賦值 給 obj2 的對應屬性,不同的屬性不會進行賦值。
2.spring的PropertyUtils.copyProperties(obj1, obj2) 的方法
與BeanUtils.copyProperties(obj1, obj2) 方法類似,多提供了類型轉換功能(即發現兩個JavaBean的同名屬性爲不同類型時,在支持的數據類型範圍
內進行轉換,如:java.util.Date是不被支持的,而它的子類java.sql.Date是被支持的);不過,效率差點。
3.Apache 的 commons組件 的copyProperties(aValue, aLocal)方法
從aLocal對象複製屬性到aValue對象(據說:消耗很大)。
轉載於:http://blog.csdn.net/shimiso
對象拷貝開源的解決方案,列出一些常見的如下:
Easy-mapper
這些框架在使用中或多或少都會存在一些問題:
1、擴展性不高,例如自定義的屬性轉換往往不太方便。
2、屬性名相同、類型不匹配或者類型匹配、屬性名不同,不能很好的支持。
3、不支持Java8的lambda表達式。
4、一些框架性能不佳,例如Apache的兩個和Dozer(BeanCopier使用ASM字節碼生成技術,性能會非常好)。
5、對象的clone拷貝往往並不是使用者需要的,一般場景引用拷貝即可滿足要求。
6、部分拷貝還未實現,如:映射註冊後,再次調整映射註冊不了。