beancopier 深拷贝_对象的拷贝有几种方法

beancopier 深拷贝_对象的拷贝有几种方法BeanCopier对象拷贝packagecom.xmsme.nicsp.monitor.util;importjava.util.List;importjava.util.Map;importjava.util.concurrent.ConcurrentHashMap;importorg.springframework.cglib.beans.BeanCopier;/***BeanCopier工具类**@authorzwy*/public…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

BeanCopier 对象拷贝

  1. 对象拷贝转为其他类的对象
  2. 对象数组拷贝转为其他类的对象数组

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.cglib.beans.BeanCopier;

/**
 * BeanCopier工具类
 *
 * @author zwy
 */
public class BeanCopierUtil {
    private static Map<String, BeanCopier> beanCopierMap = new ConcurrentHashMap<>();

    /**
     * 初始化 BeanCopier
     *
     * @param source
     * @param target
     * @return
     */
    private static BeanCopier initCopier(Class source, Class target) {
        BeanCopier beanCopier = BeanCopier.create(source, target, false);
        beanCopierMap.put(source.getName() + "_" + target.getName(), beanCopier);
        return beanCopier;
    }


    /**
     * 获取BeanCopier
     *
     * @param source
     * @param target
     * @return
     */
    private static BeanCopier getBeanCopier(Class source, Class target) {
        BeanCopier beanCopier = beanCopierMap.get(source.getClass().getName() + "_" + target.getName());
        if (beanCopier != null) {
            return beanCopier;
        }
        return initCopier(source, target);
    }


    /**
     * Pojo 类型转换(浅复制,字段名&类型相同则被复制)
     *
     * @param source 原对象
     * @param targetClass 目标类
     * @param <T>
     * @return
     */
    public static <T> T convert(Object source, Class<T> targetClass) {
        if (source == null) {
            return null;
        }
        BeanCopier beanCopier = getBeanCopier(source.getClass(), targetClass);
        try {
            T target = targetClass.getDeclaredConstructor().newInstance();
            beanCopier.copy(source, target, null);
            return target;

        } catch (Exception e) {
            throw new RuntimeException("对象拷贝失败" + source + "_" + targetClass);
        }
    }

    /**
     * Pojo 类型转换(浅复制,字段名&类型相同则被复制)
     *
     * @param source 原对象
     * @param targetClass 目标类
     * @param <E>
     * @return
     */
    public static <E> List<E> convert(List source, Class<E> targetClass) {
        if (source == null) {
            return null;
        }
        try {
            if (source.isEmpty()) {
                return source.getClass().getDeclaredConstructor().newInstance();
            }
            List result = source.getClass().getDeclaredConstructor().newInstance();

            for (Object each : source) {
                result.add(convert(each, targetClass));
            }
            return result;
        } catch (Exception e) {
            throw new RuntimeException("对象拷贝失败" + source + "_" + targetClass);
        }
    }


}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197189.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月12日 上午10:22
下一篇 2025年9月12日 上午11:01


相关推荐

  • 深挖洞广积粮不称霸_threadlocal源码

    深挖洞广积粮不称霸_threadlocal源码ThreadLocal是什么早在JDK1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它

    2025年10月8日
    4
  • 数据库与spring事务隔离级别不一致_spring事务传播行为

    数据库与spring事务隔离级别不一致_spring事务传播行为脏读:一个事务读取到另一个事务未提交的数据,出现脏读的本质是是因为操作(修改)完数据就立马释放掉锁,导致其他事务可以读取数据,而读取的数据是无用的或者错误的。不可重复读:一个事务读取到另外一个事务已经提交的数据,即一个事务可以看到其他事务所做的修改。幻读(虚读):一个事务内读取到了别的事务插入的数据,导致前后读取不一致。查看当前会话隔离级别:select@@tx_isolation;查看…

    2022年10月21日
    6
  • pycharm语法提示_pycharm怎么看函数参数

    pycharm语法提示_pycharm怎么看函数参数参考博客:https://www.cnblogs.com/wendj/archive/2018/09/21/9685012.html第三步:鼠标放到函数名,按住ctrl即可查看

    2022年8月29日
    10
  • animation rotate_canvas scale

    animation rotate_canvas scaleScaleAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation详解

    2022年10月15日
    4
  • sql语句根据某个字段去重_根据两个字段去重

    sql语句根据某个字段去重_根据两个字段去重deletefromaop_app_ipmlinfoawherea.impl_idnotin(selectmax(t.impl_id)cfromaop_app_ipmlinfotgroupbyt.app_id,t.ability_id)ps:max(t.impl_id)也能替换为min(t.impl_id)

    2025年6月19日
    5
  • navicat15激活码-激活码分享

    (navicat15激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

    2022年3月21日
    133

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号