1
2
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cglib.beans.BeanCopier;
import org.springframework.util.DigestUtils;
public class CopyBeanUtils {
/**
* Bean 对象属性copy Util
*
* @author
*/
private static Logger logger = LoggerFactory.getLogger(CopyBeanUtils.class);
private static ConcurrentHashMap<String, BeanCopier> cache = new ConcurrentHashMap<String, BeanCopier>();
/**
* @param source
* 源对象class
* @param target
* 目标对对象class
* @param sourceObj
* 复制的源对象
* @param useConverter
* @return
* @throws Exception
*/
public static <T> T copyBeanProperties( Class<T> target,
Object sourceObj, boolean useConverter) {
if (sourceObj == null)
return null;
T t;
try {
t = target.newInstance();
} catch (Exception e) {
logger.error("", e);
return null;
}
String key = sourceObj.getClass().getName() + target.getName();
BeanCopier copier = cache.get(key);
if (copier == null) {
copier = createBeanCopier(sourceObj.getClass(), target, useConverter, key);
}
copier.copy(sourceObj, t, null);
return t;
}
/**
*
*
* @param sourceObj
* 源对象
* @param target
* 目标对象
* @param useConverter
* @return
* @throws Exception
*/
public static <T> T copyBeanProperties(Object sourceObj, T target,
boolean useConverter) {
if (sourceObj == null || target == null)
return null;
String key = sourceObj.getClass().getName()
+ target.getClass().getName();
BeanCopier copier = cache.get(key);
if (copier == null) {
copier = createBeanCopier(sourceObj.getClass(), target.getClass(),
useConverter, key);
}
copier.copy(sourceObj, target, null);
return target;
}
public static <T> List<T> copyListBeanPropertiesToList(List<?> sourceObjs,
List<T> targets, Class<T> targetType) {
if (sourceObjs == null || targets == null || targetType == null)
return null;
T t;
for (Object o : sourceObjs) {
try {
t = targetType.newInstance();
targets.add(copyBeanProperties(o, t, false));
} catch (InstantiationException e) {
logger.error("", e);
} catch (IllegalAccessException e) {
logger.error("", e);
}
}
return targets;
}
public static <T> List<T> copyListBeanPropertiesToList(List<?> sourceObjs,
Class<T> targetType) {
List<T> targets=new ArrayList<T>();
return copyListBeanPropertiesToList(sourceObjs,targets,targetType);
}
private static String getHashKey(String str) {
if (str == null)
return null;
return DigestUtils.md5DigestAsHex(str.getBytes());
}
@SuppressWarnings({ "rawtypes" })
private static BeanCopier createBeanCopier(Class sourceClass,
Class targetClass, boolean useConverter, String cacheKey) {
BeanCopier copier = BeanCopier.create(sourceClass, targetClass,
useConverter);
cache.putIfAbsent(cacheKey, copier);
return copier;
}
}