BeanUtils和Cglib的Java Bean属性copy功能的性能比较

使用WSL2安装ubuntu系统并配置深度学习环境 wsl2安装ubuntu部署深度学习环境的方法 阅读详情
以前将Struts中的ActionForm的属性Copy到对应的Hibernate 实体类时,我用的是BeanUtils,觉得其功能还可以,前几天学习cglib时发现它也有个bean copy的功能,所以想将他们两的性能作个比较,就写了一个较简单的测试用例,不比不知道,一比吓一跳,看来cglib的表现确实不凡呀
package com.redbeans.test;

import java.lang.reflect.InvocationTargetException;

import junit.framework.TestCase;
import net.sf.cglib.beans.BeanCopier;

import org.apache.commons.beanutils.BeanUtils;

public class BeanCopyTest extends TestCase {


     class Bean01 {
        /** identifier field */
        private long personId;

        /** persistent field */
        private String username;

        /** persistent field */
        private String password;

        /** nullable persistent field */
        private String gender;

        /** nullable persistent field */
        private String email;

        /** nullable persistent field */
        private String address;

        /** nullable persistent field */
        private String postcode;

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public long getPersonId() {
            return personId;
        }

        public void setPersonId(long personId) {
            this.personId = personId;
        }

        public String getPostcode() {
            return postcode;
        }

        public void setPostcode(String postcode) {
            this.postcode = postcode;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
       
    }
   
    class Bean02 {
        /** identifier field */
        private long personId;

        /** persistent field */
        private String username;

        /** persistent field */
        private String password;

        /** nullable persistent field */
        private String realName;

        /** nullable persistent field */
        private String gender;

        /** nullable persistent field */
        private double height;

        /** nullable persistent field */
        private double weight;

        /** nullable persistent field */
        private int status;

        /** nullable persistent field */
        private String telephone;

        /** nullable persistent field */
        private String email;

        /** nullable persistent field */
        private String address;

        /** nullable persistent field */
        private String postcode;

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public double getHeight() {
            return height;
        }

        public void setHeight(double height) {
            this.height = height;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public long getPersonId() {
            return personId;
        }

        public void setPersonId(long personId) {
            this.personId = personId;
        }

        public String getPostcode() {
            return postcode;
        }

        public void setPostcode(String postcode) {
            this.postcode = postcode;
        }

        public String getRealName() {
            return realName;
        }

        public void setRealName(String realName) {
            this.realName = realName;
        }

        public int getStatus() {
            return status;
        }

        public void setStatus(int status) {
            this.status = status;
        }

        public String getTelephone() {
            return telephone;
        }

        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public double getWeight() {
            return weight;
        }

        public void setWeight(double weight) {
            this.weight = weight;
        }
       
    }
    public void testCglib() {
        Bean01 bean01 = new Bean01();
        bean01.setAddress("test");
        bean01.setUsername("bean01");
        Bean02 bean02 = new Bean02();
        for (int i = 0; i < 10000; i++) {
            BeanCopier copier = BeanCopier.create(Bean01.class, Bean02.class,
                    false);
            copier.copy(bean01, bean02, null);
        }
    }

    public void testBeanUtils() {
        Bean01 bean01 = new Bean01();
        bean01.setAddress("test");
        bean01.setUsername("bean01");
        Bean02 bean02 = new Bean02();
        for (int i = 0; i < 10000; i++) {
            try {
                BeanUtils.copyProperties(bean02, bean01);
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

RK3568平台开发系列讲解(外设篇)CAN的使用 📢 本篇章带大家快速了解CAN的使用。 阅读详情

相关推荐

基于AT32F421的紧凑型FOC电机驱动板设计

磁场定向控制(FOC)是永磁同步电机(PMSM)与无刷直流电机(BLDC)实现高精度转矩控制和高效运行的核心技术,其本质是通过Clarke/Park坐标变换解耦定子电流,实现d轴磁链与q轴转矩的独立调节。该技术依赖实时性严苛的电流采样、高精度位置反馈及确定性PWM生成,广泛应用于机器人关节、智能装备等中小功率伺服场景。国产Cortex-M4微控制器(如AT32F421)凭借集成ADC、高级定时器与DSP指令集,已成为低成本、高可靠FOC嵌入式实现的理想平台。本文围绕一款工程化FOC驱动板展开,涵盖低侧电流采

weixin_42510243的博客 702

更快的BeanUtil(对比BeanUtils,Cglib)

可能是最好用的BeanUtil(吹牛的) BeanUtil算是个高频使用工具类了,很多地方都用得到,大家常用的BeanUtil大概有Spring的BeanUtils以及cglib的BeanCopier,前者使用反射进行getter、setter方法调用,后者使用CGLIB代理直接操作字节码调用getter、setter方法。 BeanCopier的性能要高出Spring的BeanUtils很多,我实测大概有5倍多的差距,但是BeanCopier用起来也更加繁琐一些,需要先传入source类和target类创

ZDLW5的博客 3878

VLA算法总结对比——RT1 / RT2 / Pi0 / Octo/ RDT / OpenVLA

本文主要针最近比较经典的VLA算法进行对比总结,暂不涉及到代码细节和实验细节上的展开,仅仅是从大面上掌握下目前VLA的一些思路和方法。

weixin_44580210的博客 9496

Java 对象复制 Java对象复制6种情况 效率对比 BeanUtils 对象复制 Dozer 复习复制 MapStruct对象复制

在Java开发中,经常会遇到对象的复制转换操作 1、Spring BeanUtils 2、Apache BeanUtils 3、Dozer 4、Hutool BeanUtil 5、cglib BeanCopier 6、MapStruct

HaHa_Sir的博客 1万+

Vue - 解决 Property or method “__v_isRef“ is not defined on the instance but referenced(浏览器控制台报错,代码没错)

vue,vue2控制台报错,vue报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue代码没问题,但是报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue2如何解决报错,vue怎么解决报错问题,vue2Propertyormethod"__v_isRef"isnotdefi

🏆 前端领域优质创作者 4501

SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程-第一篇:ADT安装前置准备与环境校验教程

ABAP Development Tools(ADT)安装配置教程摘要 本文是ADT安装系列的第一篇,重点讲解环境准备与版本校验。ADT是基于Eclipse的现代ABAP开发工具,相比传统SAP GUI提供更智能的开发体验。安装前需确认: 推荐使用Eclipse 2026-03 + Java 21组合 操作系统需Windows 10+/macOS 14+ SAP GUI版本要求Windows≥8.00/macOS≥8.10 后端系统需NetWeaver 7.31 SP04+或S/4HANA 通过java -

baidu_35680696的博客 687

对象拷贝的几种方式,区别优缺点,总结最佳方式

对象拷贝的几种方式,区别优缺点,总结最佳方式

AnotherMillet 665

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1045

Cglib、Spring、Apache的BeanUtils.copyProperties的比较

声明:本文属原创文章,始发于公号:程序员自学之道,并同步发布于 https://blog.csdn.net/dadiyang 转载请注明出处! 缘起 有一次开发过程中,刚好看到一个小伙伴在调用 set 方法,将一个数据库中查询出来的 PO 对象的属性拷贝到 Vo 对象中,类似这样: 可以看出,Po 和 Vo 两个类的字段绝大...

努力改变人生 903

Python编程基础05:运算符与表达式

文章目录一、算术运算符1、分类说明表2、注意事项3、案例演示任务1、计算成绩差与平均成绩课堂练习:编程处理带余除法。任务2、打印购物小票 运算符就是专门用于告诉程序执行特定运算或逻辑操作的符号。表达式是指由常量、变量和运算符组成的一个算式。编写程序对数据进行处理,其实处理就是对数据实施各种各样的运算,搞懂运算符与表达式是我们编写程序的基础性工作,本次讲课笔记通过案例讲解各种运算符的用法以及正确书写Python表达式的注意事项。 一、算术运算符 Python中的算术运算符就是用来处理四则运算的符号,也是

howard2005的专栏 3119

SAP 角色继承、派生

角色继承、派生 继承:是指两个角色Role形成母子关系。子角色的所有菜单、授权都源于母角色,并与母角色保持一致。母角色与子角色是1对多的关系。 继承关系:新建子角色继承母角色中的事务(后续通过复制,将母角色授权数据复制至子角色) 派生概念:将母角色中的授权数据派生至子角色中。 业务场景:方便批量修改子角色权限。若有继承关系,只需要修改母角色,然后通过母角色派生功能,从而批量修改子角色授权数...

willieyuan的博客 1万+

高性能的BeanUtils(cglib版本)

不多说,直接上代码 import lombok.experimental.Accessors; import org.springframework.cglib.beans.BeanCopier; import java.io.Serializable; import java.util.concurrent.ConcurrentHashMap; /** * @author:Lee * @date: 2020/2/19 * @description:注意,当复制和被复制任意一个对象包含了@.

不积跬步无以至千里,不积小流无以成江河 620

软硬件融合加速技术系列文章

目录 文章目录目录计算机组成原理Linux 操作系统原理处理器进程管理内存管理I/O 系统文件系统网络协议栈资源管理设备管理GPUFPGASmartNIC/DPU 计算机组成原理 《计算机组成原理 — 冯诺依曼体系结构》 《计算机组成原理 — 基本硬件设备》 《计算机组成原理 — CPU 中央处理器》 《计算机组成原理 — 指令系统》 《计算机组成原理 — 总线系统》 《计算机组成原理 — 存储系统》 《计算机组成原理 — 输入输出系统 — 存储控制器接口类型》 《计算机组成原理 — 服务器》 《计算机组成

烟云的计算 6806

Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils、Spring BeanUtils、Cglib BeanCopier)

文章转载自:Bean复制的几种框架性能比较 Bean复制的几种框架性能比较: 测试结果: 10次测验 第一次 第二次 第三次 平均值 每次平均值 BeanUtil.copyProperties 54 57 50 53.66667 5.366666667 PropertyUtils.copyProperties 4 4 4 4 0.4 org.springframework....

@龙猫的博客 7805

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java Bean所有拷贝方式使用详解及性能比较

本文系统对比了Java中9种对象属性拷贝方式的优缺点及适用场景:1. 手动拷贝灵活但冗余;2. Apache/Spring BeanUtils简单但性能低;3. CGLIB BeanCopier高性能但功能有限;4. MapStruct支持复杂映射且性能最佳;5. Dozer/ModelMapper适合深拷贝;6. Lombok构造方法简洁;7. JSON序列化支持深拷贝但性能差。

onlymscn的博客 1367

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Bean属性Copy问题整理汇总

文章目录Bean属性Copy问题整理汇总1. bean copy性能对比2. bean copy部分属性 Bean属性Copy问题整理汇总 1. bean copy性能对比 结论: set > cglib > spring > apache 常用bean copy方法: org.apache.commons.beanutils.BeanUtils.copyProperties(target, source) apache的BeanUtils日志级别是debug的,会打印一堆日志,l

tianshui0823的专栏 1917

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java bean 优缺点_Java Bean Copy框架性能对比

一、问题分析背景相同server机器上的相同方法在方法调用链任何参数都一致的情况消耗时间差别非常大,举例说明,类A有方法demo(), 通过分析发现同一台机器(也是一个jvm进程)对该方法的两次调用消耗时间竟然有200ms的差距。同时,方法实现上没有使用任何的并发以及缓存,唯一特殊的是方法内使用了Apache BeanUtils.copyProperties,怀疑是这个方法有猫腻,于是开始重点分析...

weixin_29522501的博客 985

系统选型 - Java Bean Copy组件的性能对比

公司系统中之前一直有使用组件进行Bean copy的操作,只是知道此操作对性能有影响,但是到底有多少影响心里一直没有数。现在对Bean copy进行测试获取量化的结果 目前Bean Copy的主流组件: - Apache BeanUtils - Spring BeanUtils - Cglib BeanCopier 众所周知Apache BeanUtils性能太差,一般不推荐使用。这里不对其进行测试,只测试后面两个组件

不积跬步无以至千里; 不积小流无以成江海 1310

beanutil 批量copy_Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)...

public class FromBean {private String name;private int age;private String address;private String idno;private double money;public double getMoney() {return money;}public void setMoney(double money) {t...

weixin_30351503的博客 494

Bean copy实战

一次Bean copy引起的问题分析

weixin_38068301的博客 1071

cglib、orika、spring等bean copy工具性能测试和原理分析

在实际项目中,考虑到不同的数据使用者,我们经常要处理 VO、DTO、Entity、DO 等对象的转换,如果手动编写 setter/getter 方法一个个赋值,将非常繁琐且难维护。通常情况下,这类转换都是同名属性的转换(类型可以不同),我们更多地会使用 bean copy 工具,例如 Apache Commons BeanUtils、Cglib BeanCopier 等。 在使用 bean copy 工具时,我们更多地会考虑性能,有时也需要考虑深浅复制的问题。本文将对比几款常用的 bean copy 工具的

子月生的博客 1934

Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)

比较的是四种复制的方式,分别为Apache的BeanUtils和PropertyUtils,Spring的BeanUtils,Cglib的BeanCopier。做法是在Eclipse新建了一个Project,专门用于专门测试几种代码的性能。具体的代码如下:        一个FromBean和一个ToBean,两个的代码基本上一样,除了类名称不一样,所以只是贴出来了一份。

z69183787的专栏 6744

java 提示 避免用Apache Beanutils进行属性的copy。

这里引入了 import org.apache.commons.beanutils.BeanUtils;我们替换成 import org.springframework.beans.BeanUtils;避免用Apache Beanutils进行属性的copy。说明:Apache BeanUtils性能较差,可以使用其他方案比如Spring BeanUtils, Cglib BeanCopier。避免用Apache Beanutils进行属性的copy。

编程技术提升 1075

Java PO BO DTO VO bean对象互相转换高性能实现工具

方案一:MapStruct Github 官网 MapStruct使用教程 方案二:Dozer Github 官网 Dozer使用教程 Dozer 工具类 import java.util.Collection; import java.util.List; import org.dozer.DozerBeanMapper; import com.google.common.collect.Lists; /** * 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.

zhaoyang10的专栏 4170

使用Cglib的BeanCopier实现Bean的拷贝

选择Cglib的BeanCopier进行Bean拷贝的理由是,其性能要比Spring的BeanUtils,Apache的BeanUtils和PropertyUtils要好很多,尤其是数据量比较大的情况下。 伦理片 http://www.dotdy.com/        下面看具体例子: Java代码   package com.yusj.utils

dotedy的博客 2753

性能篇之对象拷贝工具BeanUtils.copyProperties和BeanCopier.copy的比较

性能篇之对象拷贝工具BeanUtils.copyProperties和BeanCopier.copy的比较

weixin_44616096的博客 1986
上一篇: JasperReports使用指南(三)---报表数据(表达式)
下一篇: Windwos2000下配置Tomcat 5使用SSL
redbeans
博客等级 码龄25年 3粉丝 29原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值