BeanUtils工具类中的copyProperties方法

1.两个包下BeanUtils.copyProperties对比

        BeanUtils工具类主要通过导入org.springframework.beans.BeanUtils或者org.apache.commons.beanutils.BeanUtils包来获取,但是不同包中BeanUtils的方法是不一样的,让我们通过实例看看这两者的不同之处吧。
        先来看一下这两个包中的copyProperties方法的定义:

//org.springframework.beans.BeanUtils
public static void copyProperties(Object source, Object target){....}//org.apache.commons.beanutils.BeanUtils
public static void copyProperties(Object dest,Object orig){....}

        org.springframework.beans.BeanUtils:
               
 

        spring框架中的BeanUtils类提供的copyProperties方法,用于将源对象的属性值复制到目标对象中:    

  • source:源对象,即属性值将被复制的对象。
  • target:目标对象,即接收源对象属性值的对象

        这个方法会检查源对象和目标对象的属性名是否匹配,是否有getter和setter方法(含有@Data也可以)。如果匹配,将源对象中非空属性更新到目标对象中。
                需要注意spring提供的BeanUtils不会自动处理类型转换。如果属性类型(比如:String)不对应将会抛出异常。
        

@Data
public class Student {private String id;private String name;private String age;}@Data
public class Teacher {private String id;private String name;}


        接下来看一下实例:
        

	public static void main(String[] args) throws Exception {Student student = new Student("123", "zhangsan", "19");Teacher teacher = new Teacher("12334","lisi");System.out.println(student.toString());BeanUtils.copyProperties(student,teacher);System.out.println(teacher.toString());}


 使用org.springframework.beans.BeanUtils下的copyProperties方法,执行结果如下:
    原始数据:Student(id=123 name=zhangsan, age=19)
    原始数据:Teacher(id=12334, name=zhangsan)
    结果:Teacher(id=123, name=zhangsan)

小类更新大类:

BeanUtils.copyProperties(teacher,student); // 其他保持不变

    原始数据:Student(id=123 name=zhangsan, age=19)
    原始数据:Teacher(id=12334, name=zhangsan)
    结果:Student(id=12334, name=zhangsan, age=19)

org.apache.commons.beanutils.BeanUtils

Apache Commons BeanUtils 库中的 BeanUtils 类也提供了 copyProperties 方法,其功能与 Spring 的类似,但签名稍有不同:
 

//org.apache.commons.beanutils.BeanUtilspublic static void copyProperties(Object dest,Object orig){....}
  • dest:目标对象,即接收属性值的对象。
  • orig:源对象,即属性值将被复制的对象。

    与 Spring 的 BeanUtils 类似,Apache Commons 的 BeanUtils 也会检查源对象和目标对象的属性名是否匹配,并且是否有相应的 getter 和 setter 方法。如果匹配,属性值将被从源对象复制到目标对象。

    Apache Commons BeanUtils 的一个显著特点是它尝试自动处理类型转换。
    如果找不到合适的转换器,它可能会抛出异常。
            接下来看一下实例:
     

    	public static void main(String[] args) throws Exception {Student student = new Student("123", "zhangsan", "19");Teacher teacher = new Teacher("12334","lisi");System.out.println(student.toString());BeanUtils.copyProperties(teacher,student);System.out.println(teacher.toString());}
    

BeanUtils.copyProperties(teacher,student); // 注意此时参数位置

执行结果如下:
    原始数据:Student(id=123, name=zhangsan, age=19)
    原始数据:Teacher(id=12334, name=lisi)

        结果:Teacher(id=123, name=zhangsan)
        

注意:如果使用这个包想将小类(字段没有全部包含)更新大类,我测试结果是没有反应的,也就是说保持原样(可以实操一下)

	public static void main(String[] args) throws Exception {Student student = new Student("123", "zhangsan", "19");Teacher teacher = new Teacher("12334","lisi");System.out.println(student.toString());BeanUtils.copyProperties(student,teacher);System.out.println(student.toString());System.out.println(teacher.toString());}

原始数据:Student(id=123, name=zhangsan, age=19)
原始数据:Teacher(id=12334, name=lisi)

结果:Student(id=123, name=zhangsan, age=19)
           Teacher(id=12334, name=lisi)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BEV下统一的多传感器融合框架 - FUTR3D

BEV下统一的多传感器融合框架 - FUTR3D 引言 在自动驾驶汽车或者移动机器人上,通常会配备许多种传感器,比如:光学相机、激光雷达、毫米波雷达等。由于不同传感器的数据形式不同,如RGB图像,点云等,不同模态…

TypeError报错处理

哈喽,大家好,我是木头左! 一、Python中的TypeError简介 这个错误通常表示在方法调用时,参数类型不正确,或者在对字符串进行格式化操作时,提供的变量与预期不符。 二、错误的源头:字符串格式化…

动力电池热管理方案介绍与发展方向

摘要 随着电动汽车的快速发展,高性能的动力电池系统成为推动电动汽车产业发展的重要因素。然而,伴随着能量密度提高和放电深度增加,电池热管理问题逐渐凸显。良好的热管理方案能够提高电池的寿命,保障电池性能,延长电…

【C语言刷题系列】移除元素

目录 一、问题描述 二、解题思路 三、源代码 个人主页: 倔强的石头的博客 系列专栏 :C语言指南 C语言刷题系列 一、问题描述 二、解题思路 在C语言中,原地移除数组中所有等于特定值的元素并返回新长度的问题可以通过双指针法…

Linux:进程信号(一)信号的产生

目录 一、信号是什么? 二、Linux信号 三、信号处理方式 四、信号的产生 1、 通过终端按键产生信号 2、调用系统函数向进程发信号 3、 硬件异常产生信号 一、信号是什么? 在生活中,有许多信号,比如红绿灯,下课铃声…

后缀字串排序

直接sort: #include <iostream> #include <cstring> #include <algorithm> #include <vector>using namespace std;int main() {string str;cin >> str;int len str.size();vector<string> strings;for(int i 0; i < len; i){strin…

文件删了,回收站清空了怎么恢复?文件恢复软件一览

在日常生活和工作中&#xff0c;我们常常会遇到误删除文件的情况&#xff0c;有时甚至会因为清空了回收站而无法找回这些文件。这些文件可能包含重要的工作数据、个人照片或其他珍贵的回忆。那么&#xff0c;在这种情况下&#xff0c;我们该如何恢复这些被删除且清空回收站的文…

【数字图像处理笔记】Matlab实现图像平滑算法 均值-中值-高斯滤波 (三)

&#x1f48c; 所属专栏&#xff1a;【数字图像处理笔记】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x…

二手车买卖求购置换租车微信抖音小程序开源版开发

二手车买卖求购置换租车微信抖音小程序开源版开发 二手车置换平台小程序系统&#xff0c;为买家和卖家提供了一个交流和交易的平台 Uniapp&#xff0c;基于Uniapp开发&#xff0c;仅支持编译微信小程序和抖音小程序 车辆发布&#xff0c;自主发布车辆信息。 圈子交流&#xff…

ubuntu20.04通过minio配置FTP服务

项目需求&#xff1a;原来存储文件用的是oss服务存储的&#xff0c;本地minio服务。因为项目需求需要ftp服务来访问文件。查看了一下minio官网4.20版本以后的支持ftp服务。官网介绍如下&#xff1a; 参考文章地址如下&#xff1a;File Transfer Protocol (FTP/SFTP) — MinIO …

五种主流数据库:窗口函数

SQL 窗口函数为在线分析系统&#xff08;OLAP&#xff09;和商业智能&#xff08;BI&#xff09;提供了复杂分析和报表统计的功能&#xff0c;例如产品的累计销量统计、分类排名、同比/环比分析等。这些功能通常很难通过聚合函数和分组操作来实现。 本文比较了五种主流数据库实…

发电机保护系统工作原理及作用

发电机保护系统工作原理及作用 发电机保护是发电机的安全运行对保证电力系统的正常工作和电能质量起着决定性的作用&#xff0c;同时发电机本身也是十分贵重的电气设备&#xff0c;因此&#xff0c;应该针对各种不同的故障和不正常工作状态&#xff0c;装设性能完善的继电保护装…

ECC 号码总结

1、问题背景 在手机开发过程中&#xff0c;经常遇见各种紧急号码问题&#xff0c;在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中&#xff0c;定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…

VTK —— 二、教程七 - 对点云进行操作(按下r键切换选取或观察模式)(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功&#xff0c;若无VTK库则请先参考如下链接编译vtk源码&#xff1a; VTK —— 一、Windows10下编译VTK源码&#xff0c;并用Vs2017代码测试&#xff08;附编译流程、附编译好的库、vtk测试源码&#xff09; 教程描述 本…

2024.5.6

Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setFixedSize(540,720);//背景颜色this->setStyleSheet("background-color:white");//去掉头部this->setWindowFlag(Qt::FramelessWindowHint);//标签相关设置QLabel *lab1 new QL…

嵌入式5-6QT

1> 思维导图 2> 自由发挥应用场景&#xff0c;实现登录界面。 要求&#xff1a;尽量每行代码都有注释。 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置标题this->setWindowTitle("MYQQ");//设置图标this…

底层逻辑(5)世界法则

底层逻辑(5)世界法则 世界三大法则 人是群居动物&#xff0c;所以每个人都避免不了和其他人打交道&#xff0c;特别是在大城市里&#xff0c;我们需要经常和陌生人打交道。 打交道的次数越多&#xff0c;你可能越能遇到一些所谓的巨婴或者杠精。这类人很难打交道&#xff0c…

从ChatGPT革命性的对话系统,看人机交互模式6个阶段的演变

ChatGPT引领革命&#xff0c;看人机交互六步飞跃 ©作者|wy 来源|神州问学 引言 在科技的浪潮中&#xff0c;人机交互模式不断演进&#xff0c;从最初的简单指令输入到如今的智能对话系统&#xff0c;每一次革新都昭示着人类与机器交流方式的深刻变革。ChatGPT&#xff0…

昂科烧录器支持O2Micro凹凸科技的电池组管理IC OZ7708

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中O2Micro凹凸科技的电池组管理IC OZ7708已经被昂科的通用烧录平台AP8000所支持。 OZ7708是一款高度集成、低成本的电池组管理IC&#xff0c;适用于5~8s Li-Ion/Polymer电池组&a…

AVL树浅谈

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;本篇文章给大家介绍AVL树。 基本概念 AVL树&#xff08;Adelson-Velsky和Landis树&#xff09;是一种自平衡的二叉搜索树&#xff0c;得名于其发明者G. M. Adelson-Velsky和E. M. Landis。在AVL树中&#xff0c;任何节点的…