美文网首页
BeanCopierUtils

BeanCopierUtils

作者: 寒雨然 | 来源:发表于2020-01-08 20:01 被阅读0次
import org.springframework.cglib.beans.BeanCopier;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class BeanCopierUtils {

    private static Lock initLock = new ReentrantLock();

    private static Map<String, BeanCopier> beanCopierMap = new ConcurrentHashMap<>();

    private static BeanCopier init(Class source, Class target) {
        initLock.lock();

        String key = genKey(source, target);
        BeanCopier beanCopier = beanCopierMap.get(key);
        if (null != beanCopier) {
            initLock.unlock();
            return beanCopier;
        }

        BeanCopier newBeanCopier = BeanCopier.create(source, target, false);
        beanCopierMap.put(key, newBeanCopier);

        initLock.unlock();
        return newBeanCopier;
    }

    private static String genKey(Class<?> src, Class<?> dest) {
        return src.getName() + "_" + dest.getName();
    }

    public static void copy(Object src, Object dest) {
        String key = genKey(src.getClass(), dest.getClass());
        BeanCopier beanCopier = null;

        if (!beanCopierMap.containsKey(key)) {
            beanCopier = init(src.getClass(), dest.getClass());
        } else {
            beanCopier = beanCopierMap.get(key);
        }

        beanCopier.copy(src, dest, null);
    }

}

相关文章

网友评论

      本文标题:BeanCopierUtils

      本文链接:https://www.haomeiwen.com/subject/eplkrctx.html