Spring和Apache包下的对象拷贝工具BeanUtils.copyProperties()

Apache中BeanUtils的copyProperties的源码分析 最近在使用Apache的BeanUtils的时候,看了一下源代码。对静态方法copyProperties的一些分析 当我们调用BeanUtils.copyProperties(dest,orig)方法的时候. 1.程序会根据环境上下文创建一个BeanUtilsBean对象,再根据该对象调用其方法copyProperties(dest,orig),源代码如下. BeanUtil 阅读详情

一.背景

今天在使用BeanUtils.copyProperties()进行对象拷贝的时候遇到了一个坑。因为业务需求,要拷贝一个对象,为了不影响的原有对象的属性,自然不能直接赋值,用set方法又太笨重了,浅克隆和深克隆需要继承接口重写clone()方法,别人的对象,怕改了影响别人。。。于是想到了BeanUtils.copyProperties(),简洁方便。

二.遇坑

一个小坑。。。

Spring包下的org.springframework.beans.BeanUtils.copyProperties();

	public static void copyProperties(Object source, Object target) throws BeansException {
		copyProperties(source, target, null, (String[]) null);
	}

Apeche包下的org.apache.commons.beanutils.BeanUtils.copyProperties();

    public static void copyProperties(Object dest, Object orig)
        throws IllegalAccessException, InvocationTargetException {
        
        BeanUtilsBean.getInstance().copyProperties(dest, orig);
    }

通过源码可以发现,Spring包下的原类在前,目标类在后;而Apeche包下的恰恰相反。

之前用过的Apeche的,这次用Spring的用Apeche的语法写的,结果可想而知。。

三.总结

1.看了下源码和网上讨论,Spring的BeanUtils.copyProperties()会忽略null的属性,只拷贝有值的属性,相比Apache包下的不容易出现一些错误。

2.无论Spring的还是Apache的,cglib包下也有一个对象拷贝工具,Spring和Apache是使用反射机制实现的,cglib是使用动态代理实现的。它们都会牺牲一定的效率。

3.对于只有几个属性的对象,直接使用set,get方法就好,属性多的话尽量使用Spring下的吧。

4.使用工具类在代码简洁等地方上来说是很好的,但是使用之前,无论需求再多、工作代码量再多,都要仔细看看源码实现,避免这些坑。(反思。。)

5.以后自己提炼一下工具类!

 

spring和apache的BeanUtils.copyProperties 类别所在的包函数参数性能Apache较差Spring较好。 阅读详情

相关推荐

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1651

关于BeanUtils拷贝null属性的问题

BeanUtils在copy null属性时会有一些问题。现在总结一下现象、原因和解决方法。 问题现象 1.当源对象(a)中存在一个java.sql.Date类型的属性并且值为null,目标对象(b)中也存在这个同名同类型的属性。把a对象属性值copy给b时BeanUtils.copyProperties(b, a);会抛出异常; 2.当源对象(a)中存在一个java.sql.Date类型的...

郭大神的博客 9537

可变形卷积(Deformable Conv)原理解析与torch代码实现

图6为可变形卷积示意图。图1所示为普通卷积在输入特征图上进行卷积计算的过程,卷积核大小为3*3,在输入特征图尺寸为7*7上进行卷积,将卷积核权重与输入特征图对应位置元素相乘并求和得到输出特征图元素,按一定方式滑动窗口就能计算得到整张输出特征图。图6所示,在input feature map上普通卷积操作对应卷积采样区域是一个卷积核大小的正方形(绿框),而可变形卷积对应的卷积采样区域为一些蓝框表示的点,这就是可变形卷积与普通卷积的区别。先来一张图感受一下,图3为标准卷积与可变形卷积的卷积示例。

panghuzhenbang的博客 5万+

慎用Apache的BeanUtils.copyProperties复制属性

之前写过一篇文章,说我的项目由于使用了的BeanUtils.copyProperties,在数据量很大的情况下,我的日志文件记录了大量这些复制属性的相关信息,导致服务器内存占用率高达97%。这两天我做的一个功能,也使用到了它,依然是大数据量,功能需要几分钟才能完成。我看了一下日志文件以及通过debug观察耗时的节点。果然又是因为BeanUtils.copyProperties。查了一下度娘,我了解到这玩意之所以会记录大量的信息到日志文件,是因为它使用了转换器,这个转换器会把把转换的过程什么的记录到日志。一个

sinat_35803474的博客 1306

JS逆向-快手__NS_hxfalcon参数分析

现在快手H5接口都需要__NS_hxfalcon这个参数,这篇文章就是逆向这个参数

ckcookies的博客 4076

NCBI Datasets CLI优化:解决基因组数据下载报错与速度问题

基因组数据下载是生物信息学分析的关键环节,其稳定性和效率直接影响研究进度。NCBI Datasets CLI作为官方命令行工具,常面临连接中断和下载速度慢两大痛点,这主要源于服务器连接限制和网络传输问题。通过自动重试机制和校验修复流程可提升稳定性,而连接复用与CDN加速等技术能显著提高下载效率。在植物基因组等大规模数据场景中,结合脱水模式和增量更新策略可减少70%传输量。本文以艾草基因组项目为例,展示如何通过并行下载和API优化将100个基因组的下载时间从18小时缩短至2小时,为生物信息学研究提供可靠的数据

weixin_29051245的博客 243

BeanUtils.copyProperties

简介 这里说的是spring的BeanUtils.copyProperties BeanUtils 提供对 Java 反射和自省 API 的包装,其主要目的是利用反射机制对 JavaBean 的属性进行处理 public static void copyProperties(Object source, Object target) throws BeansException { copyProperties(source, target, (Class)null, (String[])null);

qq_40813329的博客 1万+

白话机器学习算法理论+实战番外篇之Xgboost

1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Adaboost等 无监督算法:聚类,降维,关联规则, PageRank等 我前面已经尝试用最白话的语言完成了一个白话机器学习算法理论+实战系列,这个系列已经基本包含了上面这些算...

Miracle8070 1万+

Apache的BeanUtils.copyProperties的坑

问题解释: 再CopyProters的时候,apache没有通过递归的方式去嵌套copy属性对象的子属性,而是直接通过orig.getXXX和desc.setXXX的方式进行复制,所以只要出现三层以上,也就是子属性的子属性那么你的末日了,他可能变成了另一个对象而且无法再编译时发现,只会在运行时告诉你ClassCastError。 暴力模拟,这里只是简单的模拟。 ...

LFSenior 1460

DSShop移动商城网店系统 反序列化RCE漏洞复现

DSShop单店铺移动商城网店系统的getCartList方法的cart参数存在php反序列化漏洞,攻击者可以通过漏洞执行任意代码,获取服务器权限。

0xSec 1472

AgentScope深入分析-ReActAgent

ReActAgent 是 AgentScope 框架中最核心的智能体实现,它完美诠释了"推理-行动"(Reasoning-Acting)循环的精髓。本文将深入分析 ReActAgent 的类继承关系、核心执行流程,以及状态管理、钩子机制、实时介入等关键技术点。通过阅读本文,你会理解智能体如何与模型交互、如何执行工具、如何处理中断,以及这些机制背后的设计考量。模块化:通过组合不同的组件(模型、格式化器、工具集、记忆)来构建智能体透明性:所有关键流程都对开发者可见,可以精确控制可扩展性。

842

BeanUtils工具类中的copyProperties方法使用

文章目录1、两个包下的BeanUtils.copyProperties对比2、BeanUtils.copyProperties的深浅拷贝问题2.1、浅拷贝和深拷贝2.2、BeanUtils.copyProperties深浅拷贝问题 1、两个包下的BeanUtils.copyProperties对比 BeanUtils是开发中常用到的工具类,而获取这一工具类主要是通过导入org.springframework.beans.BeanUtils或者org.apache.commons.beanutils.Bean

qgnczmnmn的博客 9万+

YOLOv11【第一章:零基础入门篇·第10节】YOLOv11项目实战:从零搭建检测系统!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5770

BeanUtils.copyProperties的使用(深拷贝,浅拷贝)、属性复制等

BeanUtils.copyProperties的使用(深拷贝,浅拷贝)、属性复制等

enthan809882的博客 13万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

BeanUtils.copyProperties() 详解

BeanUtils.copyProperties会进行类型转换; BeanUtils.copyProperties方法简单来说就是将两个字段相同的对象进行属性值的复制。 这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的。 一、 org.springframework.beans.BeanUtils a拷贝到b a,b为对象 BeanUtils.copyProperties(a, b); 二、org.apache.commons.beanutils.Bean

wjw_de_java的博客 7万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

使用BeanUtils.copyProperties进行对象之间的属性拷贝

问题引入 需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进行属性复制到DTO,但是对象格式又不一样,所以我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。 这种转换最原始的方式就是手动编写大量的 get/set代码,当然这是我们开发过程不愿意去做的,因为它确实显得很繁琐。为了解决这一痛点,就诞生了一些方便的类库,常用的有 apache的 BeanUtils,spring的 BeanU

njitzyd 3685

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

对象拷贝工具类BeanUtils

常用的对象拷贝方法有三种: 1.通过set,get方法: //创建user类 public class User { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Stri

wzs535131的博客 1667

BeanUtils.copyProperties的使用(深拷贝,浅拷贝)

文章目录 场景BeanUtils是深拷贝,还是浅拷贝? 什么情况适合用BeanUtils有子对象就一定不能用BeanUtils么 代码例子dest ,src 还是 src,dest 这里说的是spring的BeanUtils.cop...

m0_37695902的博客 6279

BeanUtils 工具 copyProperties 拷贝对象

java bean拷贝操作又一个非常好用的工具类 BeanUitls : spring (org.springframework.beans.BeanUtils)和apache commons-beanutils(org.apache.commons.beanutils.BeanUtils)中分别存在一个BeanUtils,提供了对。 特别注意 这两个类在不同的包下面,而这两个类的copyPr

稚枭天卓 2564

Spring BeanUtils.copyProperties和apache commons-beanutils

业务系统中经常需要两个对象进行属性的拷贝,不能否认逐个的对象拷贝是最快速最安全的做法,但是当数据对象的属性字段数量超过程序员的容忍的程度,代码因此变得臃肿不堪,使用一些方便的对象拷贝工具类将是很好的选择。 性能对比: BeanCopier > PropertyUtils > BeanUtils. 其中BeanCopier的性能高出另外两个100数量级。 目前流行的较为公用认可的工具类:

西楚小羽的专栏 7303

Apache BeanUtils和Spring BeanUtils对比

# 前言 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进行属性复制到DTO,但是对象格式又不一样,所以我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。 # 对象拷贝 在具体介绍两种 BeanUtils 之前,先来补充一些基础知识。它们两种工具本质上就是对象拷贝工具,而对象拷贝又分为深拷贝和浅拷贝,下面进行详细解释。 # 什么是浅拷贝和深拷

dongbeiou的专栏 2216

Java Spring BeanUtils 拷贝多个源对象 source 到目标对象 target

先将 Student 对象拷贝到 Info 对象,再将 Score 对象拷贝到 Info 对象,那么此时由于 Score 对象中也有 name 字段属性,且在 main 方法中没有赋值,且 后执行的拷贝,那么此时 Score 对象中的空 name 就会覆盖 前面对象 Student 对象的 name 字段属性值,结果就会导致 name 字段属性值丢失,就像这样的效果。最近在工作中,由于对象有太多的属性需要get,set ,对所有属性都这样操作的话,除了多余敲很多没有价值的代码量,还有点耽误时间。

csdn565973850的博客 1096

BeanUtils.copyProperties知多少?

事出有因 近期在读《阿里巴巴开发手册》的时候发现:阿里强制避免使用BeanUtils进行属性的拷贝,但是不得不承认的是,在我自己的项目中确实使用过Apache的Beanutils进行属性拷贝,在读了开发手册后,感觉项目中的代码可以优化一下,基于不同包下的BeanUtils性能和特性有所不同,当然用法也不尽相同,所以,可以你可能会跳入因为导错包导致对象拷贝为null的坑。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBUkz72I-1606834874223)(C:\Use

FirstMrRight的博客 2022

Bean映射工具之Apache BeanUtils VS Spring BeanUtils

原文链接:Bean映射工具之Apache BeanUtils VS Spring BeanUtils - 陈晨辰 - 博客园背景 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进https://www.cnblogs.com/chen-chen-chen/p/12050985.html 背景 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复

jarniyy的博客 785

谈谈BeanUtils.copyProperties的使用(深拷贝,浅拷贝)

文章目录 场景BeanUtils是深拷贝,还是浅拷贝? 什么情况适合用BeanUtils有子对象就一定不能用BeanUtils么 代码例子dest ,src 还是 src,dest 这里说的是spring的BeanUtils.copyProperti...

weixin_48358336的博客 2269
上一篇: 解决dubbo异常:com.alibaba.dubbo.rpc.RpcException:Forbid consumer...
下一篇: Java使用Apache的poi实现Excel导出
L聪聪聪
博客等级 码龄10年 272粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值