java对象拷贝之BeanUtils.copyProperties() 用法

BeanUtils工具类实现Bean拷贝详解 BeanUtils工具类实现Bean拷贝使用详解。 真正学会Bean拷贝! 阅读详情
一、简介:

        BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

 

二、用法:

        如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm。例如:一个用户注册页面,有一个User实体类和一个UserActionForm,我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值:


[html]  view plain  copy
  1. // 获取 ActionForm 表单数据  
  2. UserActionForm uForm = (UserActionForm) form;  
  3. // 构造一个User对象  
  4. User user = new User();  
  5. // 逐一赋值  
  6. user.setUsername(uForm.getUsername);  
  7. user.setPassword(uForm.getPassword);  
  8. user.setAge(uForm.getAge);  
  9. // 然后调用JDBC、或操作Hibernate 持久化对象User到数据库  

通过这样的方法如果表单数据N多、100、1000(夸张点。哈哈)、、、、那我们不是要写100、、、1000行set、get了。谁都不愿意这样做。

 

而我们使用 BeanUtils.copyProperties() 方法以后,代码量大大的减少,而且整体程序看着也简洁明朗,代码如下:

[html]  view plain  copy
  1. // 获取 ActionForm 表单数据  
  2. UserActionForm uForm = (UserActionForm) form;  
  3. // 构造一个User对象  
  4. User user = new User();  
  5. // 赋值  
  6. BeanUtils.copyProperties(uForm, user); 
  7. // 然后调用JDBC、或操作Hibernate 持久化对象User到数据库  
  8. .......  



注:如果User和UserActionForm 间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要手动处理。例如:

User类里面有个createDate 创建时间字段,而UserActionForm里面无此字段。BeanUtils.copyProperties()不会对此字段做任何处理。必须要自己手动处理。

Date为null时拷贝会报错

而commons-beanutils则施加了很多的检验,包括类型的转换,甚至于还会检验对象所属的类的可访问性。

而且,commons-beanutils中的装换是不支持java.util.Date的。除了支持基本类型以及基本类型的数组之外,还支持java.sql.Date, java.sql.Time, java.sql.TimeStamp,  java.io.File,  javaio.URL这些类的对象,其余一概不支持。不过你可以自定义你的类的Converter。然后注册进去。

感觉commons-beanutils包中的这个BeanUtils类的copyProperties方法,太过复杂,约束太多,而且使用不便,虽然可扩展性好了,但是易用性不高。

总结:

关于bean复制,如果属性较少,建议直接写个方法完成get/set即可。如果属性较多,可以自己采用反射实现一个满足自己需要的工具类,或者使用spring的那个beanutils类,不建议使用commons-beanutils包中的那个BeanUtils类,刚看了下,这个类对于内部静态类的对象复制也会出现问题,检验太复杂了,常会出现一些诡异的问题。毕竟我们bean复制一般就是简单的属性copy而已。

而且,由于这些BeanUtils类都是采用反射机制实现的,对程序的效率也会有影响。因此,慎用BeanUtils.copyProperties!!!


除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些


【Java】Spring中BeanUtils.copyProperties的坑及解决 如果需要将源对象中的属性拷贝到目标对象中,包括目标对象中继承自父类的属性,可以使用其他的 Java 对象映射工具,比如 Hutool的 BeanUtil、Apache Commons BeanUtils 和 Dozer 等。方法是基于 Java 反射实现的,它可以将源对象中的属性拷贝到目标对象中,并支持类型转换和自定义转换器。方法是基于 Java 反射实现的,它只能访问源对象中的属性,无法访问目标对象中继承自父类的属性。方法进行属性拷贝时,只会拷贝源对象中定义的属性,而不会拷贝目标对象中继承自父类的属性。 阅读详情

相关推荐

【java基础】类型转换拷贝:BeanUtils.copyProperties、BeanUtil.copy、Convert.convert 用法详解

是 Apache Commons BeanUtils 库中的一个静态方法,它用于从源bean复制属性值到目标bean。该方法可以处理简单的属性复制,也可以通过配置处理器来支持更复杂的属性转换逻辑。方法是来自 Apache Commons Lang 或者其他类似命名空间下的工具类,具体取决于你使用的库版本。这里以Apache Commons Lang3为例,其中并没有直接提供名为copy的方法,但有,以及。如果你提到的是另一个库,请指定库名称以便给出更准确的说明。

王大师企业官方博客 2万+

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万+

深入解析PCIe Retimer:工作原理与典型应用场景

本文深入解析了PCIe Retimer的工作原理与核心价值。作为高速信号的中继再生器,Retimer通过时钟数据恢复和信号再生技术,有效解决长距离或复杂通道中的信号衰减与完整性问题,从而极大地扩展了PCIe链路的有效传输距离。文章详细阐述了其内部架构、自动与手动两种工作模式,并重点介绍了在长距离板间互连、复杂背板设计等典型应用场景中的关键作用。

weixin_29195615的博客 504

Java对象拷贝之BeanUtils.copyProperties() 用法

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

Architect_优快云的博客 1042

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析

本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程,涵盖运动学建模、仿真环境搭建、PID控制器设计与实现等关键环节。通过Simulink仿真和可视化调试技巧,帮助开发者掌握移动机器人运动控制的核心技术,提升轨迹跟踪精度与性能优化能力。

weixin_28717683的博客 241

USRP N210与MATLAB连接实战:从驱动安装到信号接收

本文详细介绍了USRP N210与MATLAB连接的完整流程,涵盖驱动安装、网络配置、支持包安装及信号接收实战。重点解决了安装过程中的常见错误和硬件连接问题,并通过MATLAB代码示例展示了如何配置接收器、处理信号数据,帮助用户快速实现从设备对接到信号分析的全过程。

blue的专栏 819

java对象复制或拷贝之BeanUtils.copyProperties() 用法,一行语句实现对象间快速复制

java对象复制或拷贝之BeanUtils.copyProperties() 用法,一行语句实现对象间快速复制 即 BeanUtils.copyProperties(源对象, 目标对象); 使用注意事项: 1.BeanUtils是org.springframework.beans.BeanUtils,不是org.apache.commons.beanutils.BeanUtils 2.必须有get、set方法 下面详细举例说明: 2个对象分别如下: /** * 订单副表 .

一火的专栏 1189

【探秘】二维异形件重叠移除算法:从度量到消除的实战解析

本文深入解析二维异形件重叠移除算法的核心技术与实战应用,涵盖重叠度量、零件扰动策略及消除方法。通过NFP(临界多边形)技术、空间分区加速等优化手段,有效解决异形件排版中的重叠问题,提升材料利用率和计算效率。适合制造业、CAD软件开发者及算法工程师参考。

weixin_28698059的博客 251

Java对象复制或拷贝之BeanUtils.copyProperties() 用法,一行语句实现对象间快速复制

1.BeanUtils是org.springframework.beans.BeanUtils,不是org.apache.commons.beanutils.BeanUtils。java对象复制或拷贝之BeanUtils.copyProperties()用法,一行语句实现对象间快速复制。BeanUtils.copyProperties(源对象,目标对象);2.必须有get、set方法。...

qq_43842093的博客 1637

碳酸钙岩石酸蚀酸溶COMSOL建模:非均质对酸蚀通道的影响

多孔介质中的流动与化学反应耦合是石油工程和地下资源开发中的核心问题,酸液与岩石矿物的溶蚀过程直接关系到酸化增产效果。在碳酸盐岩储层中,盐酸与方解石的反应速率极快,酸液会优先沿高渗透区域推进,形成指状酸蚀通道,即wormhole。传统均质模型难以描述这种局部溶蚀行为,而数值模拟工具COMSOL通过耦合达西定律、稀物质传递与孔隙度演化方程,能够定量刻画酸蚀路径与渗透率的变化规律。工程实践中,模拟结果可用于预测酸液突破体积、优化注入排量,并为基质酸化方案设计提供依据。本文围绕碳酸钙岩石酸蚀酸溶COMSOL模型,探

weixin_29009401的博客 327

由Sensor光谱响应曲线联想到的白平衡增益计算

由Sensor光谱响应曲线联想到的白平衡增益计算 由于传感器硬件的限制,传感器在某个预定波长范围内的响应不可能是100% 响应。现实中都是类似于正态分布的单峰函数。如果仅做粗略计算,由一个中心波长和半高宽(也成半波宽)完全可以由数学公式计算出一个高斯分布曲线。这个分布曲线就叫波谱响应函数。 波谱响应函数反映了传感器通道获取能量的情况。实际上每个传感器厂商都提供了具体的光谱响应函数,一般由两列数据组成,一列数据是波长,另一列数据是相对响应强度。下图某sensor光谱的响应的波谱响应函数。 ...

大熊 7488

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

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

enthan809882的博客 13万+

LPDDR4 JEDEC标准测试实例解析--写操作

LPDDR4的JEDEC标准一致性测试项详解以及实例分享,满满干货!感兴趣的小伙伴可以持续关注!!

一只豌豆象的博客 7774

Java使用BeanUtils.copyProperties实现对象的拷贝

BeanUtils.copyProperties 方法是 Java 中 Spring 框架提供的一个非常实用的工具方法,它用于将一个 JavaBean 对象的属性值拷贝到另一个 JavaBean 对象中。这个方法主要用于简化对象之间的数据转换过程,尤其是在处理具有大量相同属性的对象时,可以大大减少代码量,提高开发效率。

pan_junbiao的博客 1779

某易将军令口令纯算法还原py篇

算法开源,将军令口令算法。希望官方多多更新吧

任雪飘的博客 3909

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java BeanUtils.copyProperties() 详解及应用

方法用于将一个 Java 对象的属性复制到另一个对象。它在处理数据传输对象(DTO)、视图对象(VO)和实体对象(Entity)之间的数据传递时非常有用。source:源对象,属性值从这个对象中提取。target:目标对象,将属性值复制到这个对象中。是一个强大的工具,可以简化对象属性的拷贝操作。它在 Java 开发中扮演着重要的角色,尤其是在对象转换、数据封装和自动化测试等场景中。虽然它提供了很大的便利,但在性能要求较高的情况下,可能需要评估其他解决方案。

m0_73467713的博客 1万+

Camera2Demo

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

beanutils copyproperties_BeanUtils 如何拷贝 List?

一、背景我们在DO、Model、VO层数据间可能经常转换数据:Entity对应的是持久层数据结构(一般是数据库表的映射模型);Model 对应的是业务层的数据结构;VO 就是Controller和客户端交互的数据结构。例如:数据库查询出来的用户信息(表的映射模型)是UserDO,但是我们需要传递给客户端的是UserVO,这时候就需要把UserDO实例的属性一个一个赋值到UserVO实例中。在这些数...

weixin_39900023的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

BeanUtils.copyProperties()拷贝属性时,忽略空值

BeanUtils.copyProperties(Object source, Object target)方法可以快速的将source对象中的属性赋值给target对象。当我们对java实体执行相关操作时,使用BeanUtils工具可以快速执行新增、修改时对实体属性的赋值操作。 但是若source对象中的属性为null时,target中相应的属性也会被修改为null,有时候这可能不是我们希望的结...

crazywsp的博客 6173

【Java基础】深拷贝、浅拷贝和BeanUtils.copyProperties

【Java基础】深拷贝、浅拷贝和BeanUtils.copyProperties

学习笔记 4646

java对象拷贝——PropertyUtils.copyProperties()用法和性能

BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。 使用PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个...

@zpp的博客 3124

BeanUtils.copyProperties()用法总结

是Apache Commons BeanUtils库提供的一个工具方法,用于将一个JavaBean对象的属性值复制到另一个JavaBean对象中。这个方法可以简化对象属性之间的拷贝操作,减少手动设置属性的代码量。如果需要更复杂的拷贝逻辑,可以考虑使用其他方式,例如手动遍历属性进行拷贝,或者使用更高级的Bean拷贝库。// 手动拷贝示例是Java开发中常用的Bean属性拷贝工具,通过简单的调用,可以快速实现对象属性的复制。然而,在使用时需要注意一些限制和异常情况,确保拷贝操作的稳定性和准确性。

技术研究中心 1973
上一篇: 如何手动获取Spring容器中的bean(ApplicationContextAware 接口)
下一篇: selenium_webdriver(python)鼠标操作详解
visual2015
博客等级 码龄11年 12粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值