BeanCopier工具类_BeanUtils

BeanCopier工具类_BeanUtilscglib的BeanCopier功能很强大,不过频繁的create太占用资源,降低服务器性能,所以写了下面的代码进行优化。以达到提升性能的目的。主要就是用缓存将类型相同的copier缓存起来,后续copy的时候就不用再继续创建了。这样的话如果有频繁用到BeanCopier的地方,将是很有用处滴。importorg.springframework.cglib.beans.BeanCopi…

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

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

cglib的BeanCopier功能很强大,不过频繁的create太占用资源,降低服务器性能,所以写了下面的代码进行优化。以达到提升性能的目的。主要就是用缓存将类型相同的copier缓存起来,后续copy的时候就不用再继续创建了。

这样的话如果有频繁用到BeanCopier的地方,将是很有用处滴。

import org.springframework.cglib.beans.BeanCopier;

import java.util.concurrent.ConcurrentHashMap;

/**
 * BeanCopier工具类
 * @author 李锋镝
 */
public class BeanCopierUtil {
    /**
     * BeanCopier的缓存
     */
    static final ConcurrentHashMap<String, BeanCopier> BEAN_COPIER_CACHE = new ConcurrentHashMap<>();

    /**
     * BeanCopier的copy
     * @param source 源文件的
     * @param target 目标文件
     */
    public static void copy(Object source, Object target) {
        String key = genKey(source.getClass(), target.getClass());
        BeanCopier beanCopier;
        if (BEAN_COPIER_CACHE.containsKey(key)) {
            beanCopier = BEAN_COPIER_CACHE.get(key);
        } else {
            beanCopier = BeanCopier.create(source.getClass(), target.getClass(), false);
            BEAN_COPIER_CACHE.put(key, beanCopier);
        }
        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();
    }
}

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/archives/article/500

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Django安装教程_怎样安装ubuntu安装教程

    Django安装教程_怎样安装ubuntu安装教程第二步:安装django这一步由于网络问题可能会出现连接超时报错,只能重试:第三步:测试效果第四步:创建Django项目启动Web服务启动时会提示如下错如:解决办法:再运行就不会报错了。以上显示就是正常运行了,我们可以访问测试一下:返回状态码200表示成功!!!或者通过浏览器访问:参考:https://docs.djangoproject.com/en/4.0/intro/install/上一课1.1Docker安装Django下一课1.3完成一个简单的Demo

    2022年9月8日
    4
  • camunda「建议收藏」

    camunda「建议收藏」CamundaBPM用途:流程管理、流程解决方案支持语言:java,nodejs入门指导:1.https://docs.camunda.org/get-started/quick-sta

    2022年8月1日
    4
  • python安装numpy后pycharm导入不了_如何导入numpy

    python安装numpy后pycharm导入不了_如何导入numpypycharm安装好后numpy的导入pipinstallnumpy使用pip命令在dos环境下出现平台不支持,python版本太高,numpy不匹配,刚开始下的3.7的最新版,重新下载3.6的版本,安装成功。python安装的时候自己选择路径,勾选自动配置环境变量,默认安装路径在一个隐藏的文件夹temp里面,临时文件,容易系统清除。配置项目解释器,将py

    2022年8月26日
    6
  • mt4电脑版安装教程_mt4中文版下载正版官网

    mt4电脑版安装教程_mt4中文版下载正版官网MT4软件版本比较多,电脑版,手机版(安卓和IOS),以及MAC版都有。下载和安装电脑版和其它软件的流程是一样的。首先第一步是要获取到软件包,在http://mt4.m1.xinclo.xyz/就行。下载完毕,然后是解压,全自动安装过程,按照指示进行安装。安装成功后,在登录自己的MT4账户即可。接下来就是设置一些自己要用到的指标。…

    2022年8月15日
    6
  • 计算机一级ip地址分类,IP地址分类和子网划分[通俗易懂]

    计算机一级ip地址分类,IP地址分类和子网划分[通俗易懂]一、IP地址1、IP地址概述§在一个IP网络中每一个设备的唯一标识符,有32位二进制数组成,这些位通常被分割成四组,每组包含一个字节(8位)。然后转换成十进制表示,这叫点分十进制表示法。§每一个主机(计算机,网络设备,外围设备)必须有一个唯一的地址。§IP地址由网络ID和主机ID组成,网络ID:标识某个网段,在同一个网段的计算机,它们的网络ID是一样的,不同网段的计算机,它们的网络ID…

    2022年6月5日
    37
  • ScheduledThreadPoolExecutor 中ScheduleAtFixedRate 和 ScheduleWithFixedDelay方法讲解

    java 中ScheduledExecutorService接口是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。

    2022年2月26日
    52

发表回复

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

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