BeanUtils的copyProperties的效率…

使用 BeanUtils 做属性拷贝,性能有点拉胯! 首先公司内部就遇到过 commons 包的 BeanUtils 进行属性拷贝性能较差的真实案例,然后该同事换成了 Spring 的 BeanUtils 性能好了很多,感兴趣大家可以使用性能测试框架或者基准测试框架去对比,这里就不对比了。因此慎用属性转换工具,如果可能建议自定义转换类,使用 IDEA插件自动填充,效率也挺高, A 或 B 中任何属性类型不匹配,甚至删除一个属性,编译阶段即可报错,而且直接调用 get set 的效率也是非常高的。这就导致在使用很多属性映射工具时,编译时不容易明显的错误。... 阅读详情

BeanUtils的copyProperties的效率问题实际上来说应该是反射的效率问题,不过copyProperties方法里面的那些判断也带来了一些效率问题,下面来测试一下copyProperties的效率问题。

首先建一个类User,代表一个用户,有用户名和密码属性,代码如下:

public class User {
private String name;
private String password;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPassword() {
    return password;
}

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

建一个类,名为AbstractService,代码如下:

public abstract class AbstractService {
public static int userCount = 100000;

public User srcUsers[] = new User[userCount];

public User destUsers[] = new User[userCount];

public AbstractService() {
    for (int i = 0; i < userCount; i++) {
     User user = new User();
     user.setName("" + i);
     user.setPassword("" + i);
     srcUsers[i]=user;
   
     User user1 = new User();
     destUsers[i]=user1;
    }
}

public abstract void process() throws Throwable;

public long service() throws Throwable{
    long beginTime = System.currentTimeMillis();
    process();
    long endTime = System.currentTimeMillis();
    return endTime - beginTime;
}
}

建立一类BeanUtilsService,代码如下:

import java.lang.reflect.InvocationTargetException;

import org.apache.commons.beanutils.BeanUtils;

public class BeanUtilsService extends AbstractService {
@Override
public void process() throws IllegalAccessException,
     InvocationTargetException {
    for (int i = 0; i < userCount; i++) {
     BeanUtils.copyProperties(destUsers[i], srcUsers[i]);
    }
}
}

建立一类GetterSetterService,代码如下:

public class GetterSetterService extends AbstractService{

@Override
public void process() {
    for(int i=0;i<userCount;i++){
     destUsers[i].setName(srcUsers[i].getName());
     destUsers[i].setPassword(srcUsers[i].getPassword());
    }
}

}

写一测试方法,测试一下效率问题:

    BeanUtilsService beanUtils=new BeanUtilsService();
    GetterSetterService getterSetterService=new GetterSetterService();
    System.out.println(beanUtils.service());
    System.out.println(getterSetterService.service());

我的机器配置大体如下:Core duo2 T5500+1.5G内存,测试结果如下:

在userCount为10000的情况下,采用copyProperties大概为450ms左右,而普通的get和set方法为0ms。

在userCount为100000的情况下,采用copyProperties大概为1450ms左右,而普通的get和set方法为15ms左右。

可以看出,copyProperties与普通的get和set方法相比,大概差100倍左右,这个效率不可以说不大。当程序效率要求较高的情况下,尽量不要采用copyProperties方法。


本文转自:http://blog.youkuaiyun.com/huangxin5257/article/details/2296673

By:lsfhack Email:lsfhack@163.com QQ:858084865

常见的BeanUtils.copyProperties的坑 Data@Data。 阅读详情

相关推荐

为啥不建议用BeanUtils.copyProperties拷贝数据 | 京东云技术团队

在实际的业务开发中,我们经常会碰到VO、BO、PO、DTO等对象属性之间的赋值,当属性较多的时候我们使用get,set的方式进行赋值的工作量相对较大,因此很多人会选择使用spring提供的拷贝工具BeanUtils的copyProperties方法完成对象之间属性的拷贝。通过这种方式可以很大程度上降低我们手动编写对象属性赋值代码的工作量,既然它那么方便为什么还不建议使用呢?下面是我整理的BeanUtils.copyProperties数据拷贝一些常见的坑。

JDDTechTalk的博客 2175

BeanUtils的copyProperties的效率问题

BeanUtils的copyProperties的效率问题实际上来说应该是反射的效率问题,不过copyProperties方法里面的那些判断也带来了一些效率问题,下面来测试一下copyProperties的效率问题。首先建一个类User,代表一个用户,有用户名和密码属性,代码如下:public class User {private String name;private String

8849

BeanMapper:比BeanUtils.copyProperties更快

BeanMapper 一个BeanUtils.copyProperties的小型快速替代。 起因 由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在运行时直接生成字节码来转换类,在首次生成后,后续运行可以提供近原生的读写速度。 限制条件 类必须具有符合小驼峰规范的JavaBean setter和getter。否则无法正常访问类。 类必须是公共可见的,否则会发生访问错误。 效率 在10000000次复制测试中 BeanUtils.copyProperties用时9809毫秒 StaticBeanMapper.copy用时100毫秒(首次编译)+ 3633毫秒(后续10000000次调用) BeanMapper.copy用时98毫

BeanUtils.copyProperties()方法的用法及效率

一、简介: org.springframework.beans.BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。 二、用法: 如果你有两个具有很多相同属性的JavaBean,一...

try to do 4641

PID调参避坑指南:为什么你的电机总是震荡?从比例带积分到微分实战解析

本文针对电机控制中常见的震荡问题,提供了一份PID调参实战指南。文章深入解析了比例(P)、积分(I)、微分(D)三个参数对系统稳定性的影响,揭示了比例增益过大是导致震荡的关键原因之一,并给出了从纯比例调试到引入积分、微分的系统化调参流程与避坑要点,帮助工程师快速实现电机平稳、精准的控制。

weixin_28223453的博客 457

Vitis Model Composer闪退?手把手教你用命令行启动Vivado 2021后的System Generator

本文详细解析了Vitis Model Composer闪退问题的根本原因,并提供了命令行启动Vivado 2021后System Generator的完整解决方案。从环境变量配置、组件缺失排查到权限问题处理,手把手教你通过命令行深度排错,并分享高级自动化脚本和系统优化技巧,帮助开发者高效使用Vitis Model Composer与System Generator进行HDL开发。

weixin_26905487的博客 348

BeanUtils.copyProperties vs 手动Setter:效率对比实测

便捷性往往以性能为代价反射操作的开销在Java中仍然显著对性能有要求的项目要慎重选择工具类没有绝对的好坏,只有适合的场景内部管理系统、低频操作:BeanUtils足够高并发服务、核心路径:手动setter更优需要动态处理的场景:考虑优化后的反射实现整个测试项目在InsCode(快马)平台上可以一键运行和查看结果,不需要配置任何环境就能复现测试过程。平台提供的在线编辑器和即时预览功能让性能对比变得非常简单直观。

YellowSun24的博客 1014

MATLAB实战:手把手教你搭建构网逆变器同步稳定性仿真模型(附避坑指南)

本文详细介绍了如何在MATLAB/Simulink平台上搭建构网逆变器同步稳定性仿真模型,涵盖从基础模块配置到虚拟同步机控制实现的完整流程。针对电力电子工程师常见的控制参数整定困难、仿真结果偏差等问题,提供了LCL滤波器谐振抑制、虚拟惯量优化等关键技术解决方案,并附有避坑指南和工程实践技巧,助力研究者高效完成仿真建模。

weixin_29051193的博客 297

Commons组件之BeanUtils.copyProperties()的效率探究二——copyProperties的效率分析

       上一篇介绍了BeanUtils的使用,这一篇将分析copyProperties的执行效率。测试的时候引入了Spring的BeanUtils做比较。        主体代码如下:  public void  CalEfficence()  throws IllegalAccessException, InvocationTargetException {  Long traditionalCopyTime = 0L;  Long springCopyPropertiesTime = 0L;  L

1274

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9925

WorldPop数据集

WorldPop数据集介绍

qq_43874102的博客 1万+

Beanutils.copyProperties( )用法及重写提高效率

特别说明本文介绍的是Spring(import org.springframework.beans.BeanUtils)中的BeanUtils.copyProperties(A,B)方法。是将A中的值赋给B。apache(org.apache.commons.beanutils.BeanUtils)中的BeanUtils.copyProperties(A,B)方法是将B中的值赋值给A。 一、简介...

菜鸟黑一枚 1万+

【数据集】CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

WW、forever的博客 400

Beanutils.copyProperties( )用法及重写提高效率(参数的顺序)

最重要的是要注意参数的顺序 一、简介: BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。 二、用法: 如果你有两个具有很多相同属性的JavaBean,一个很常见的情...

weixin_38933749的博客 783

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

使用MATLAB/Simulink对一个简单的智能家居温湿度监测与控制系统进行建模和仿真

目录手把手教你学Simulink——基于Simulink的智能家居温湿度监测与控制仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:构建传感器模块步骤3:添加控制器步骤4:构建执行器模块步骤5:连接各部分步骤6:设置仿真参数步骤7:添加观测器步骤8:运行仿真并分析结果四、总结 智能家居系统中的温湿度监测与控制系统是一个典型的物联网(IoT)应用场景,它通过传感器收集环境数据,并根据预设条件自动调节室内温度和湿度以提高居住舒适度。本指南将介绍如何使用MATLAB/S

xiaoheshang_123的博客 291

JAVA SpringUtil.copyProperties和BeanUtils.copyProperties效率

(1):SpringUtil.copyProperties(class1,class2);// id属性泛型复制不到,由于继承的父类属性是泛型。 (2):BeanUtils.copyProperties(class1,class2);// 此方式效率极慢,spring的copyproties稍可接受,get,set几乎1ms 第一种方法,如果复制的类继承了父类,父类的ID属性是泛型并且序列化了会导致复制失败(详情可以debug跟代码); 第二种方法:没有遇到上述问题。 如果复制需要的属性不存在泛型问题,建议

BugRoot的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java BeanUtils.copyProperties()方法的用法及效率

1.BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们在项目中经常使用到的PO对象和VO对象在很多情况下属性是相同的,通过BeanUtils.copyProperties()方法可以减少程序员再次get/set方法的书写,BeanUtils.copyProperties()方法也有它的优缺点,下面我们通过程序来验证。2.首...

Architect_优快云的博客 1933

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

代码审核之提高赋值效率,BeanUtils.copyProperties()

对于两个具有很多相同属性的JavaBean,使用BeanUtils.copyProperties(Object source, Object target)。 BeanUtils.copyProperties()方法,里面参数是(Object source, Object target)。 第一个参数是数据源,第二个参数是目标数据,把参数一的值赋值给参数二。 ...

小海的博客 444

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Commons组件之BeanUtils.copyProperties()的效率探究一——BeanUtils的简介

一、简介:      BeanUtils提供对 Java反射和自身API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。二、用法:      BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:      public static void copyProperties(j

715

比较Spring、apache和Property的beanUtils效率的案例

平时使用的bean有许多,我们来比较一下; 1.首先建立FromBean和ToBean两个bean类, package com.testbeanutils; /**  * @author zhangjiamei  * @createtime 2015年10月28日   * @version 0.1  * @instruction 用于测试的bean类  */ public

张佳美的专栏 3268

BeanUtils.copyProperties和clone()方法的区别

最近撸代码的时候发现有人将一个对象的值赋给另一个对象的时候,并没有使用常规的set/get方法去给对象赋值,而是采用BeanUtils.copyProperties(A,B)这个方法去赋值,但是有的还是有局限性,比如Date类型的值无法赋值,只能赋值为null,所以我大致百度了一下,作为记录。 首先,BeanUtils有两种: org.springframework.beans和org.apach...

qxf1374268的博客 3867
上一篇: spring中文api下载
下一篇: hibernate级联保存更新
jarry.liu
博客等级 码龄16年 36粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jarry.liu

如果对您有帮助,鼓励下博主吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值