BeanUtils.copyProperties的使用场景

1. 常见场景

我们如果有两个具有很多相同属性名的JavaBean对象a和b,想把a中的属性赋值到b,例如

  • 接口中将接收到的前端请求参数XxxReqVo,我们想把这个入参转化为XxxQuery对象作为数据库的查询条件对象

传统做法是手动set,即

XxxBean xxxBean = new XxxBean();
xxxBean .setAxx(xxxReqVo.getAxx());
xxxBean .setBxx(xxxReqVo.getBxx());
xxxBean .setCxx(xxxReqVo.getCxx());

如果有几十个需要赋值的的字段呢?那就很头疼了org.springframework.beans.BeanUtils,它提供了对java反射和自省API的包装。它里面还有很多工具类,这里我们介绍一下该类下面的copyProperties方法,该工具方法可以帮我们大大简化这一步

2. 应用案例


2.1 案例一(两个无关的类做属性拷贝)
 

@Data
public class User {
    private String id;
    private String name;
    private String age;
    private String account;
    private String password;
}
 

@Data
public class Person {
    private String id;
    private String name;
    private String age;
    private String sex;
}
 

public class Test {
    public static void main(String[] args) {
        User user = new User();
        user.setId("1");
        user.setAge("2");
        user.setName("wzh");
        user.setAccount("wangzh");
        user.setPassword("1111");
        Person person = new Person();
        BeanUtils.copyProperties(user,person);
    }
}
 

结果: 

Person(id=1, name=wzh, age=2, sex=null) 

通过上述测试我们就可以总结出相关结论,基本用法为 

BeanUtils.copyProperties(source,target); 

3. BeanUtils.copyProperties的使用场景

在 Spring 框架中,BeanUtils.copyProperties 方法的定义如下:
BeanUtils.copyProperties(archTreeDTO, newSysArchTree);
该方法接收两个参数,archTreeDTO 和 newSysArchTree。archTreeDTO表示要被复制的源对象,newSysArchTree表示要被赋值的目标对象。我们只需要调用这个方法,就可以将 archTreeDTO对象的属性值复制到 newSysArchTree对象中。

4. 什么是深拷贝什么是浅拷贝?


4.1 浅拷贝(shallowCopy)

只是调用子对象的set方法,并没有将所有属性拷贝。(只是增加了一个指针指向已存在的内存地址)


4.2 深拷贝(deepCopy)

增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存;同时如果一个类中包含有引用类型变量,则该类拷贝以后引用类型也会被拷贝。


5. BeanUtils.copyProperties深浅拷贝问题


BeanUtils.copyProperties使用起来虽然方便,但是它其实只是浅拷贝,所以类中都是单一的属性,像咱们上边介绍的,可以直接用;如果类中包含有其他的子类就需要考虑下拷贝后目标对象中包含被copy的对象中的子类是否有可能被修改,如果有可能被修改就不能直接使用。

6. 什么情况适合用BeanUtils


如果都是单一的属性,那么不涉及到深拷贝的问题,适合用BeanUtils。
 

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

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

相关文章

Python Opencv实践 - HoG特征计算

参考资料:https://www.cnblogs.com/alexme/p/11361563.html https://blog.csdn.net/qq_43348528/article/details/108638030 import cv2 as cv import numpy as np import matplotlib.pyplot as plt from skimage import exposure from skimage.feature i…

靶场溯源第二题

关卡描述:1. 网站后台登陆地址是多少?(相对路径) 首先这种确定的网站访问的都是http或者https协议,搜索http看看。关于http的就这两个信息,然后172.16.60.199出现最多,先过滤这个ip看看 这个很…

SSM - Springboot - MyBatis-Plus 全栈体系(八)

第二章 SpringFramework 四、SpringIoC 实践和应用 4. 基于 配置类 方式管理 Bean 4.4 实验三:高级特性:Bean 注解细节 4.4.1 Bean 生成 BeanName 问题 Bean 注解源码: public interface Bean {//前两个注解可以指定Bean的标识AliasFor…

Mendeley在linux中无法打开APPimage

原因:FUSE 库为用户空间程序提供了一个接口,可以将虚拟文件系统导出到 Linux 内核。由于缺少这个关键库,AppImage 无法按预期工作。 1 安装fuse,打开终端,输入命令 sudo apt install libfuse2 输入用户密码结,果如下 2 确保APPimage作为程序运行 右击…

docker 获取Nvidia 镜像 | cuda |cudnn

本文分享如何使用docker获取Nvidia 镜像,包括cuda10、cuda11等不同版本,cudnn7、cudnn8等,快速搭建深度学习环境。 1、来到docker hub官网,查看有那些Nvidia 镜像 https://hub.docker.com/r/nvidia/cuda/tags?page2&name11.…

【计算机视觉 | 图像模型】常见的计算机视觉 image model(CNNs Transformers) 的介绍合集(五)

文章目录 一、MoCo v3二、AmoebaNet三、Residual Multi-Layer Perceptrons四、FractalNet五、LV-ViT六、RepVGG七、Transformer in Transformer八、SimpleNet九、SpineNet十、Bottleneck Transformer十一、ZFNet十二、DetNet十三、Invertible Rescaling Network十四、SNet十五、…

SVN 索引版本与打包版本号不匹配

今天突然遇到了一个问题,SVN上传不了,错误提示如下: 解决方法: 1.其实,这是SVN库不小心搞坏了,只能重新再创建一个SVN仓库了。

Redis:分布式锁误删原因分析

一、线程阻塞 例如,线程一获取分布式锁,但是线程一阻塞时间过长,导致锁超时释放。此时线程二获取分布式锁。当线程一阻塞结束后,释放分布式锁,但是释放的却是线程二的锁。此时线程二就不安全了,线程三也可…

Linux下修改jar包中的配置文件application.conf

文件位置 jar包文件工程目录 打包后解压jar包目录 提取和上传 jar tf XXX.jar # 获取包内文件 application.conf是jar包的配置文件,如果修改需要 提取文件 jar xf my-app.jar application.conf 修改后上传文件 jar uf my-app.jar application.conf

解决开了burp suite ,火狐访问不了其他网站的问题

问题描述: 有软件正在阻止 Firefox 安全地连接至此网站 www.baidu.com 很像是一个安全(连接加密)的网站,但我们未能与它建立安全连接。这个问题是由 PortSwigger CA 所造成,它是您的计算机或您所在网络中的软件。 您…

为什么Proteus串口无法正常显示

我以前就可以正常显示,但是最近一段时间,发现串口无法正常显示,试了很多办法都不行, 然后今天干好有点时间就刷了个机,然后居然就好了, 这就说明:Proteus不正常可能是病毒破坏了某个文件导致异…

HSRP(热备份路由选择协议)的概念,原理与配置实验

作者:Insist-- 个人主页:insist--个人主页 梦想从未散场,传奇永不落幕,持续更新优质网络知识、Python知识、Linux知识以及各种小技巧,愿你我共同在CSDN进步 目录 一、了解HSRP协议 1. 什么是HSRP协议 2、HSRP协议的…

java和fastjson

1.java是如何跨平台通信的 java--->class字节码--->jvm虚拟机运行 2.使因为jvm只会读文件名 如果不一致 则无法找到文件 3.main 函数说明java代码的接口 被使用 4.java和class后缀的区别 java是当前编写的代码文件 class是编译后的文件 5.void 没有返回值 这…

Django系列:Django简介与MTV架构体系概述

Django系列 Django简介与MTV架构体系概述 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/132890054 【介…

Canny图像算法仿真

目录 一、简要说明 1.1 算法流程 第一步,图像降噪。 第二步,计算图像梯度,得到可能边缘。 第三步,非极大值抑制。 第四步,双阈值筛选。 1.2 验证流程: 二、操作步骤 第一步:获取图像 …

代码随想录算法训练营第48天|198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…

国产洗碗机打响超越战

“征服世界的将是这样一些人:开始的时候,他们试图找到梦想中的乐园。最终,当他们无法找到时,就亲自创造了它。”诺贝尔文学奖获得者萧伯纳的这句话,适用于许多中国行业和企业,洗碗机就是其中之一。 对热爱…

Zabbix监控平台部署流程

Zabbix WEB、Zabbix Server、Zabbix Database放在一台服务器;(192.168.10.12)Zabbix Agent部署在被监控服务器上 (192.168.10.11)Zabbix Porxy 单独部署在一台服务器上(被监控服务器少于500台可以不部署&am…

C#: 未能加载文件或程序集“xxx“

导入数据时,发生了异常,错误日志如下: 2023-09-11 09:20:49,304 [125] FATAL [(null)] - NPOI.POIXMLException ---> System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.IO.FileLoadException: 未能加…

矿山边坡安全监测及预警系统解决方案

1.建设背景 近年来,矿山安全问题一直受到国家和社会的高度关注。为了全面提升矿山安全生产水平,国家矿山安全监察局和各省级非煤矿山安全监管部门开展了一项重大举措:推广并实施露天矿山边坡监测系统。 矿山边坡和排土场安全是露天矿山安全生…