BeanUtils.copyProperties方法理解

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确定需要操作的目前对象类


/**
*将给定源bean的属性值复制到给定的目标bean中。
*注意:源类和目标类不必匹配,甚至不必派生彼此,只要属性匹配。 任何源bean属性公开(public),但目标bean没有,则此条属性被忽略。
*
* @参数来源的源bean
* @param指向目标bean
* @param编辑类(或接口)来限制属性设置
* @param ignoreProperties要忽略的属性名称数组
*如果复制失败,则抛出BeansException
*看到BeanWrapper
*/
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);


你可能感兴趣的:(Spring)