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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言的printf输出格式

    C语言的printf输出格式1、控制小数点后有多少位:printf(“%.10lf\n”,f_a); //将浮点数f_a输出时,输出其小数点后10位,默认是输出小数点后6位。2、控制一共(小数点前后以及小数点)输出多少位:printf(“%10.7f\n”,f_b); //将浮点数f_b输出时,输出其小数点前2位,小数点后7位(加上小数点共10位)。3、输出时让正数带”+”号,负数带”-“号:printf(“%+f\

    2022年7月24日
    17
  • 组织级敏捷转型的四个阶段

    组织级敏捷转型的四个阶段

    2021年7月6日
    83
  • Matlab保存图片的几种方法「建议收藏」

    Matlab保存图片的几种方法「建议收藏」写在前面:本文系作者原创,转载或引用请注明文章出处,多谢!Matlab中保存图片有很多函数可以用到,本文将简单总结三种保存图像的方法,其他的日后补充。1、保存一幅经过处理的图像,又不希望损失其分辨率:采用imwrite()函数例:想保存图像img,可以写:imwrite(img,adressString);%adressString表示输出地址如果希望同时输出多张图片,可以这样定义string:adressString=[‘D:\picture\’sprintf(‘%0.4d’,nu

    2025年11月9日
    3
  • 代码走查1

    代码走查1线上问 和研发一起简单的从代码层面去解决问题 略 low 代码走查 1 存在的问题 SQL 查询 1 对于业务上没有用的字段没必要添加比如 IsDel 在具体的业务上 删除数据是直接硬删除 直接删除了物理数据 所以 在 SQL 查询的时候 SQL 读着可能没有问题 但实际执行却没有意义 没必要添加 2 不等于 查空值 要和判断语句相符合 不要在 SQL 语句中否定 而 if 判断中肯定 很容易迷茫

    2025年10月24日
    4
  • java实现cs架构_cs模型人物看不见

    java实现cs架构_cs模型人物看不见Java网络编程案例–CS模型的简单实现Java网络编程案例CS模型的简单实现基本概述程序原理图源代码基本概述该程序采用C/S模型,在服务器端简单的建立了一个多线程类,来实现对多个客户端传入的数据进行处理。在客户端行处理类,对数据进行一次解析,再调用各个发送类进行处理。采用固定的命令格式,字符编码格式以及字节流,实现了消息发送,二进制文件和文本文件传送,下载文件的功能。程序原理图源代码:J

    2025年12月6日
    2
  • 使用withCount后再使用select设置查询的字段。就找不到withCount的数据了

    使用withCount后再使用select设置查询的字段。就找不到withCount的数据了

    2021年11月8日
    36

发表回复

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

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