Spring BeanUtils類提供屬性字段複制方法
1.public static void copyProperties(Object source, Object target)
内部都是調用下面的私有方法
2.public static void copyProperties(Object source, Object target, String… ignoreProperties)
内部都是調用下面的私有方法,ignoreProperties可以是一組需要忽略複制的字元串
3.public static void copyProperties(Object source, Object target, Class<?> editable)
内部都是調用下面的私有方法,editable确定需要操作的目前對象類
private static void copyProperties(Object source, Object target, Class<?> editable, String… ignoreProperties)
實作邏輯:
1.判斷target能否轉換為editable類的類型,不能直接異常"Target class [" + target.getClass().getName() +"] not assignable to Editable class [" + editable.getName() + “]”
2.擷取目标類型的所有屬性PropertyDescriptor,提取忽略字段ignoreProperties
3.循環處理目标類型字段,隻處理非忽略字段,通過源bean的類型和處理字段名稱,擷取對應源PropertyDescriptor
4.對源屬性PropertyDescriptor的read方法判斷類型是否和目标屬性寫的類型比對,方法類型是否public的
5.最終符合條件的通過反射寫入writeMethod.invoke(target, value);