Cglib BeanCopier工具类

服务器AutoDL自己部署QWen3 说明:核心参数:30B 模型原精度权重文件约 60GB,单张 PRO 6000 拥有 48GB 显存,单卡塞不下原精度模型,2张 PRO 6000 = 96GB 总显存,这不仅能装下模型,还能留出约 30GB 显存给 KV Cache(上下文长度) 以及 Omni 多模态组件 处理图片/视频输入时的额外开销。1. 前提准备模型选择:直接下载到 AutoDL 服务器上=》原精度模型(BF16/FP16) 的 Qwen3-Omni-30B,选择的示例和环境如下。# 3. 正式执行模型下载。 阅读详情

目录

前言

上代码

解析

github地址


前言

一般大家都会使用BeanUtils.copyProperties来复制对象,不过Cglib更快

所以今晚熬夜把这个工具类也封装一下,由于在创建BeanCopier会消耗很多时间,我们使用Map来储存BeanCopier

上代码

import com.example.demo.entity.User;
import com.example.demo.entity.UserVO;
import org.springframework.cglib.beans.BeanCopier;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.*;

/**
 * @author M
 *
 * 对象复制以及队列复制
 */
@Component
public class MyBeanUtils {

    private static Map<String, BeanCopier> map = new HashMap<>();

    /**
     * 对象复制
     * @param obj1 被复制对象,为空会抛出异常
     * @param classz 复制类型
     * @param <T>
     * @return
     */
    public static <T> T copyObject(Object obj1, Class<T> classz) {
        if (obj1 == null || classz == null) {
            throw new IllegalArgumentException("复制对象或者被复制类型为空!");
        }
        T obj2 = null;
        try {
            obj2 = classz.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
        String name = getClassName(obj1.getClass(), classz);
        BeanCopier beanCopier;
        if (map.containsKey(name)) {
            beanCopier = map.get(name);
        } else {
            beanCopier = BeanCopier.create(obj1.getClass(), classz, false);
            map.put(name, beanCopier);
        }
        beanCopier.copy(obj1, obj2, null);
        return obj2;
    }

    /**
     * 复制队列
     * @param list 被复制队列
     * @param classz 复制类型
     * @param <T>
     * @return
     */
    public static <T> List<T> copyList(List<?> list, Class<T> classz) {
        if (CollectionUtils.isEmpty(list)) {
            throw new IllegalArgumentException("被复制的队列为空!");
        }
        List<T> resultList = new LinkedList<>();
        for (Object obj1 : list) {
            resultList.add(copyObject(obj1, classz));
        }
        return resultList;
    }

    private static String getClassName(Class<?> class1, Class<?> class2) {
        return class1.getName() + class2.getName();
    }

    public static void main(String[] args) {
        User user = new User();
        user.setId(1L);
        user.setName("大鸡腿");
        User user1 = new User();
        user1.setId(2L);
        user1.setName("小鸡腿");
        UserVO vo = MyBeanUtils.copyObject(user, UserVO.class);
        System.out.println(vo);
        List<User> list = new ArrayList<>();
        list.add(user);
        list.add(user1);
        List<UserVO> list1 = MyBeanUtils.copyList(list, UserVO.class);
        System.out.println(list1);
    }


}

解析

  1. map用来储存BeanCopier,避免反复创建,消耗资源。
  2. 在复制对象以及队列时,如果为空会抛出异常,我可以返回一个null,或者空队列,为啥要报错呢?我们在使用的时候其实需要自己去判空来减少不必要的业务操作。如果说为了健壮性,返回一个实例或者空队列也行。自行改造
  3. 使用泛型来确保返回的对象类型和传入的类型一致

github地址

https://github.com/dajitui/MyCopy

 

 

uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available. MDK5.37安装ARM_Compiler_5 MDK5.37安装ARM_Compiler_5 最后一个AC5编译器,从MDK5.37开始,不再默认安装,需要独立安装 ARMCompiler_506_Windows_x86_b960.zip (80.94MB) 否则使用AC5编译代码报错如下: Build started: Project: Project *** Target 'STM3210C_EVAL' uses ARM-Compiler 'Default Compiler Version 5' which is not available. * 阅读详情

相关推荐

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 977

Spring学习笔记(二)【CGLIB浅拷贝BeanCopier的使用和详解】

常用的bean拷贝工具类当中,主要有Apache提供的beanUtils、Spring提供的beanUtils、Cglib提供的beanCopier,性能上分析如下表所示

Vinjcent 7487

27、振动信号实时并行处理与风力发电机模型鲁棒控制设计

本文探讨了振动信号实时并行处理与风力发电机模型鲁棒控制设计两大核心技术。在振动信号处理方面,提出基于FPGA、RT和PC三级架构的并行采集与处理系统,实现高效、实时的振动分析,适用于电机状态监测与预测性维护。在风力发电控制方面,研究风力农场布局优化(WFLO)问题,比较九种多目标元启发式算法性能,并提出基于扰动观察法的最大功率点跟踪(MPPT)控制策略,提升发电效率与系统鲁棒性。研究成果为工业设备智能监控与可再生能源优化提供了有效技术路径。

sunny的博客 55

BeanCopier封装

BeanCopier封装

qq1805696978的博客 5578

使用CGlib实现Bean拷贝(BeanCopier)

目录 BeanCopier基本用法 自定义转换器 封装BeanCopier   在做业务的时候,我们有时为了隔离变化,会将DAO查询出来的Entity,和对外提供的DTO隔离开来。大概90%的时候,它们的结构都是类似的,但是我们很不喜欢写很多冗长的b.setF1(a.getF1())这样的代码,于是我们需要BeanCopier来帮助我们。选择CglibBeanCopier进行Bean...

bingguang1993的博客 1838

关于我封装BeanCopier这件事

Bean的拷贝我们不陌生,经常与之打交道,看了很多评测,抛开功能不说,性能上前三大致就是原生的get/set、MapStruct、cglib bean copy。之所以需要是用beanCopy,就是因为大量的get/set不雅观(绝对不是我们懒)。MapStruct是在编译时期生成的代码,但是其使用让我觉得繁琐。cglib使用动态字节码技术生成class文件,在全局缓存的copier之后速度也是非常的快。但是也有很多不方便的地方,我结合实际需求,对它动了心❤。...

jsl575的博客 1353

【业务功能篇71】CglibBeanCopier进行Bean对象拷贝

选择CglibBeanCopier进行Bean拷贝的理由是, 其性能要比Spring的BeanUtils,Apache的BeanUtils和PropertyUtils要好很多, 尤其是数据量比较大的情况下。 BeanCopier的主要作用是将数据库层面的Entity转化成service层的POJO。BeanCopier其实已经有很多开源版本,例如DozerMapper、Apache BeanUtils、Spring、Jodd BeanUtils甚至是Cglib都提供了这样的功能。我们这里讲的Bean

studyday1的博客 674

cglib中的两个工具类BeanMap,BeanCopier

         这两天看了下cglib的一些源码,发现BeanMap和BeanCopier在工作中应该可以用到,虽然已经apache和spring的相关工具类可以用了,但是多一个工具类也不嫌多嘛,况且BeanCopier的速度会更快一些。           1.BeanMap本身是实现了Map的接口,将对象转成Map很方便使用           2.不同对象的属性的COPY    ...

zeromike 5312

BeanCopier 对象拷贝

BeanCopier 对象拷贝 package com.xmsme.nicsp.monitor.util; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.springframework.cglib.beans.BeanCopier; /** * BeanCopier工具类 * * @author zwy */ public...

w329636271的专栏 1045

BeanCopier工具类

使用缓存封装BeanCopier工具类

wylove12345678的博客 1151

net.sf.cglib.bean.BeanCopy 性能较高推荐使用

<dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.3.1</version> </de...

qingchengkao的博客 720

七种对象复制工具类,你最看好哪个?,java面试题高级

话外音:一个对象属性这么多,显然是不太合理的,我们设计过程应该将其拆分。 直到后来,阿粉了解到了对象属性复制工具类,使用之后,发现是真相,再也不用手写代码。再后来,碰到越来越多工具类,虽然核心功能都是一样的,但是还是存在很多差异。新手看到可能会一脸懵逼,不知道如何选择。 所以阿粉今天这篇介绍一下市面上常用的工具类: Apache BeanUtils Spring BeanUtils Cglib BeanCopier Dozer orika MapStruct 工具类特性 ==.

m0_64384350的博客 707

七种对象复制工具类,阿粉该 Pick 谁?

每天早上七点三十,准时推送干货日常编程中,我们会经常会碰到对象属性复制的场景,就比如下面这样一个常见的三层 MVC 架构。当我们在上面的架构下编程时,我们通常需要经历对象转化,比如业务请...

Java极客技术 536

jsp和controller数据交互工具类

1 2 import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cglib

lisheng19870305的专栏 1385

利用cglibBeanCopier用原型模式以及享元模式完成对象的拷贝

实际上对象拷贝的工具有很多种,比如apache BeanUtils、apache PropertyUtils、spring BeanUtils。在一些业务代码中现在经常看到的都是spring BeanUtils来进行对象拷贝。大部分情况下来说已经足够了,但如果居于性能考虑,以上几种工具都是利用反射的原理来完成的,性能相比cglib beanCopier利用动态代理实现稍差一筹,这里不去对比几种工具的性能,只展示BeanCopier如何进行使用。 一、非cglib下的对象拷贝方式 1、原型模式就是从一

码工 826

Copier实现Bean的拷贝

选择CglibBeanCopier进行Bean拷贝的理由是,其性能要比Spring的BeanUtils,Apache的BeanUtils和PropertyUtils要好很多,尤其是数据量比较大的情况下。 1、简单例子,pom.xml <!-- cglibBeanCopier需要的依赖 --> <dependency> ...

tdt008的博客 589

cglib代理类来进行对象数据复制

cglib代理类来进行对象数据复制

m0_63266743的博客 308

使用BeanCopier工具类拷贝JavaBean

JavaBean拷贝 深拷贝和浅拷贝概念 浅拷贝 Shallow Copy 对基本类型的属性会进行值传递,当修改其中一个对象中的属性时,不会影响另一个对象中的属性 对引用数据的属性,比如数组或某类对象,会进行引用传递,及两个对象中的属性指向同一个实例对象,修改对象会相互影响。 深拷贝 Deep Copy 深拷贝就是对引用类型的数据,也进行拷贝,开辟新的内存空间,两个bean之间相互修改自己的属性不产生影响。 开源工具类 apache的BeanUtils 原理-反射 apache的PropertyUtils

icetea916的博客 1446

BeanCopier

BeanCopierCglib包中的一个类,用于对象的复制。 net.sf.cglib.beans.BeanCopier 使用: BeanCopier copier = BeanCopier.create(Source.class, Target.class, false); copier.copy(source, target, null); public static BeanCopier beanCopier = BeanCopier.create(User.class, UserWithD

weixin_44637905的博客 806

Java 对象深度拷贝及效率比较

Java 对象深度拷贝-工具类介绍上代码性能比较总结 介绍 这里自己写了一个拷贝对象工具类,通过反射实现,能做到深度拷贝。 支持深度拷贝 基本类型, Collection, Map, Array, 自定义对象。 注意事项:源对象和目标对象,字段名称必须一样 深度拷贝:比如需要拷贝的源对象里面包含一个对象,与目标对象不同只有字段一样,BeanUtils.copyProperties 拷贝是达不到我...

qq_29834241的博客 1235

Mapper.map 对象转换工具类完整指南:从原理到实践

Mapper.map 对象转换工具类完整指南:从原理到实践

北执南念的博客 720

CGLIB

1、CGLIB    官网:http://cglib.sourceforge.net                CGLIB是一个强大的高性能的代码生成包。它被许多AOP的框架(例如Spring AOP)使用,为他们提供方法的interception(拦截)。                  Hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联。Eas

漂流幻境 4954
上一篇: EasyPoi应用以及部分源码解读
下一篇: java nio学习之Channel(三)
大鸡腿同学
大鸡腿同学 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 229粉丝 392原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值