package com.rscode.credits.util; import java.util.HashSet; import java.util.Set; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; /** * @author 作者 tn * @version 创建时间:2018年11月13日 * 类说明 复制bean */ public class BeanCopyUtil { //source中的非空属性复制到target中 /** * * @param source 源 * @param target 目标 */ public static <T> void beanCopy(T source, T target) { BeanUtils.copyProperties(source, target, getNullPropertyNames(source)); } //source中的非空属性复制到target中,但是忽略指定的属性,也就是说有些属性是不可修改的(个人业务需要) public static <T> void beanCopyWithIngore(T source, T target, String... ignoreProperties) { String[] pns = getNullAndIgnorePropertyNames(source, ignoreProperties); BeanUtils.copyProperties(source, target, pns); } public static String[] getNullAndIgnorePropertyNames(Object source, String... ignoreProperties) { Set<String> emptyNames = getNullPropertyNameSet(source); for (String s : ignoreProperties) { emptyNames.add(s); } String[] result = new String[emptyNames.size()]; return emptyNames.toArray(result); } public static String[] getNullPropertyNames(Object source) { Set<String> emptyNames = getNullPropertyNameSet(source); String[] result = new String[emptyNames.size()]; return emptyNames.toArray(result); } public static Set<String> getNullPropertyNameSet(Object source) { final BeanWrapper src = new BeanWrapperImpl(source); java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors(); Set<String> emptyNames = new HashSet<>(); for (java.beans.PropertyDescriptor pd : pds) { Object srcValue = src.getPropertyValue(pd.getName()); if (srcValue == null) emptyNames.add(pd.getName()); } return emptyNames; } }
浙公网安备 33010602011771号