首页 > 其他分享 >BeanCopierUtil 类的复制,只支持浅拷贝

BeanCopierUtil 类的复制,只支持浅拷贝

时间:2022-10-24 19:03:55浏览次数:50  
标签:beanCopier cacheKey target BeanCopierUtil beanCopierCacheMap source 复制 BeanCopie


import org.springframework.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;


/**
* BeanCopier工具类
* @author
*
*/
public class BeanCopierUtil {

/**
* BeanCopier缓存
*/
public static Map<String, BeanCopier> beanCopierCacheMap = new HashMap<String, BeanCopier>();

/**
* 将source对象的属性拷贝到target对象中去
* @param source source对象
* @param target target对象
*/
public static void copy(Object source, Object target){
String cacheKey = genKey(source.getClass(), target.getClass());
BeanCopier beanCopier = null;
// 线程1和线程2,同时过来了
if (!beanCopierCacheMap.containsKey(cacheKey)) {

synchronized(BeanCopierUtil.class) {

if(!beanCopierCacheMap.containsKey(cacheKey)) {
// 进入到这里会创建一个BeanCopier实例并且放在缓存map中
beanCopier = BeanCopier.create(source.getClass(), target.getClass(), false);
beanCopierCacheMap.put(cacheKey, beanCopier);
} else {
beanCopier = beanCopierCacheMap.get(cacheKey);
}
}
} else {
beanCopier = beanCopierCacheMap.get(cacheKey);
}
beanCopier.copy(source, target, null);
}


/**
* 生成key
*
* @param srcClazz 源文件的class
* @param tgtClazz 目标文件的class
* @return string
*/
private static String genKey(Class<?> srcClazz, Class<?> tgtClazz) {
return srcClazz.getName() + tgtClazz.getName();
}

}

标签:beanCopier,cacheKey,target,BeanCopierUtil,beanCopierCacheMap,source,复制,BeanCopie
From: https://blog.51cto.com/u_4981212/5790937

相关文章

  • 用SCP把一台服务器的文件复制到另外一台服务器
    使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上复制文件或文件夹(目录)命令: 一、复制文件:  (1)将本地文件拷贝到远程  scp文件名用户名@计算机IP......
  • 简单JS实现禁止复制和粘贴、另存为的方法
    有的时候,为了防止别人太容易复制自己网站的内容,我们可以用JS实现禁止别人复制和粘贴网站内容的方法,还有就是禁止他人通过浏览器的“另存为”菜单获取网站文章内容的方法。......
  • Mysql优化学习37-为什么binlog格式会影响复制?
    ##1.statment格式的binlog我们可以使用如下命令看下binlog并修改格式:上面这个例子就可以说明这个问题,因为我们删除数据的时候并没有指定排序的字段,所以这条数据可能跟......
  • 2.9 复制文件和文件夹 shutil模块 shutil.copy shutil.copytree
    #复制文件:shutil.copy(要复制的文件,要复制文件的位置)#复制文件夹:shutil.copytree(要复制的文件夹,要复制文件夹的位置)-----------------------------------------......
  • c++对象的拷贝、构造、虚构
    抽象基类​ 现有如下代码:classAbstract_base{public:virtual~Abstract_base()=0;virtualvoidinterface()const=0;virtualconstchar*mumble......
  • 知乎禁止复制申请转载怎么办
    知乎禁止复制申请转载怎么办知乎禁止转载的回答怎么复制做笔记?-知乎https://www.zhihu.com/question/35874016/answers/updated作者:LiuYang链接:https://www.zhihu.com/q......
  • mysql主从复制
    配置主库Master1.修改mysql配置文件/etc/my.cnf[mysqld]log-bin=mysql-bin#启动二进制文件server-id=100#服务器唯一id2.重启MySQL服务systemctlrestartmysqld......
  • Excel VBA中的“复制”和“粘帖”
    问题:在Excel中,要用VBA把一个单元格(区域)复制粘贴到指定位置,可以使用录制宏的功能,自动生成的代码如下:(假设数据源在A1:C10,指定位置是E1:G10)Sub录制宏()Range("A1:C1......
  • xcopy命令拷贝文件时忽略指定文件夹
    现在弄的项目,前端是居于一个框架进行开发的。问题是,框架还不算成熟,仍然在不断修改中。这样问题就来了,我需要常常在具体项目中更新这个框架。怎么更新呢?手动更新,问你死未。真......
  • MySQL基础---> 复制表
    今天我们说说MySQL中的复制表功能。需要完全的复制MySQL的数据表,就需要包括表的结构、索引、默认值等。步骤如下:1.使用showcreatetable命令获取创建数据表(createtabl......