package com.alibaba.aone.framework.common.util;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.cglib.beans.BeanCopier;
import org.springframework.cglib.core.Converter;
/**
* Created by weibi on 2018/5/7.
*
* @author weibi
* @date 2018/05/07
*/
public class BeanUtil {
private static final ConcurrentHashMap<String, BeanCopier> BEAN_COPIER_CACHE = new ConcurrentHashMap<>();
public static <S, T> T copy(S source, Class<T> targetClass) {
return copy(source, targetClass, null);
}
public static <S, T> T copy(S source, Class<T> targetClass, Converter converter) {
if(source == null) {
return null;
}
T target = null;
try {
target = targetClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException("new instance error", e);
}
BeanCopier beanCopier = getBeanCopier(source.getClass(), targetClass, converter != null);
beanCopier.copy(source, target, converter);
return target;
}
private static <S, T> BeanCopier getBeanCopier(Class<S> source, Class<T> target, boolean useConverter) {
String key = source.getName() + "::" + target.getName() + "::" + useConverter;
BeanCopier beanCopier = BEAN_COPIER_CACHE.get(key);
if(beanCopier == null) {
beanCopier = BeanCopier.create(source, target, useConverter);
BeanCopier old = BEAN_COPIER_CACHE.putIfAbsent(key, beanCopier);
if(old != null) {
beanCopier = old;
}
}
return beanCopier;
}
}
ali自定义BeanUtil
最新推荐文章于 2022-09-26 16:53:55 发布