BeanUtils.copyProperties基本用法与小坑

2023-11-10

(1)实际应用

BeanUtils.copyProperties(赋值目标对象,模板源对象);
我们都知道当有两个对象AB,属性名称一样的情况下,如果需要把A的全部属性给B,传统写法是:
B.setXX(A.getXX());
如果只有几个特别的参数需要赋值过去这样写没问题,如果AB有100个参数需要粘过去,那么代码就太冗余太长了,BeanUtils.copyProperties就是为了解决这个问题的,现在假设有AB两个对象:

static class DemoA {
    private String name;
    private int sex;
    private int phone;
}

static class DemoB {
    private String name;
    private int sex;
    private int phone;
}

测试main方法:

public static void main(String[] args) throws Exception {
    DemoA a = new DemoA();
    DemoB b = new DemoB();
    a.setName("jojo");
    a.setPhone(12306);
    a.setSex(1);

    BeanUtils.copyProperties(b,a);
    System.out.println("b: "+b.getName()+b.getPhone()+b.getSex());
}

在这里插入图片描述

(2) 使用要注意的小坑:

1:如果AB都是或者有一个是static的,赋值都会失败

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2:注意引入的包

import org.apache.commons.beanutils.BeanUtils;
在这里插入图片描述
之前手快引错了,死活拿不出来,浪费了一点时间Debug
如果用的是springframework的这个方法,记住复制对象和源对象位置是刚好相反。千万注意自己引入的哪个BeanUtil,写对应参数位置。

3:不提供get,set方法

在这里插入图片描述

public static void main(String[] args) throws Exception {
    DemoA a = new DemoA("jojo",1,12306);
    DemoB b = new DemoB();

    BeanUtils.copyProperties(b,a);
    System.out.println("b: "+b.toString());
}

赋值失败
在这里插入图片描述
为什么呢?因为,它底层是通过反射获取对象里面的每个属性,再通过get,set获取和设值,不提供get,set,就当然没办法复制了。

4:加@Data注解

我们知道lombok.Data包中的@Data注解可以帮助我们省去get,set方法,那么不写getset,加@Data行不行?
在这里插入图片描述
在这里插入图片描述
结果是可以的,我个人理解的注解的本质就是切面编程,把一些固定的逻辑通过增强型代理类配置进去,外部在使用的时候也就是使用增强型代理类的方法,而@Data类似一些省事的语法糖,帮助我们“写”了那堆get,set方法供别人调用。

5:参数名不一致的,不能复制成功

注意,参数名必须严格一致,例如:A.name 对应 B.name,如果是B.nAme或者B.names,那就肯定不行了!
如果刚好两个实体类参数名不一致,怎么办呢?那只能用老的写法B.setNames(A.getName());

(3)以springframework.beans的BeanUtils.copyProperties为例,快速看几眼源码,不难理解

第一个参数是源,第二个参数是目标对象
在这里插入图片描述
在这里插入图片描述
红色方法就是反射创建对象方法
在这里插入图片描述

以上就是我的个人使用总结,如果有说错的欢迎大佬提出来,后面后持续补充~~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BeanUtils.copyProperties基本用法与小坑 的相关文章

  • Strapi 之API详述

    API的使用 REST API允许通过API端点访问 content types 当一个内容类型被创建时 Strapi会自动创建API端点 在查询API端点时 可以使用API参数来细化结果 可以理解为 对于每一个 content types
  • 工业协议网关IOTCS企业版正式发布

    一 发布前言 继今年5月份IOTCS开源版本发布以后 我们依然在致力于开源版的功能升级迭代 目前南向驱动类型支持OPCUA与Siemens S7协议 1200 1500型号 以及Modbus全协议 北向资源有HTTP MQTT 通过不同的连
  • 怎么设置访问服务器文件夹权限凭据,Windows server 共享文件夹权限设置

    概念 共享权限应用于通过网络连接到共享文件夹的用户 共享权限不会影响本地登录或使用远程桌面登录的用户 若要为本地登录用户或使用远程桌面登录的用户设置权限 请使用 安全 选项卡而不是 共享权限 选项卡 这样将在 NTFS 文件系统级别设置权限
  • 数组的三种定义方式

    1 数组的定义 用于存储同一类型数据的集合 其实数组就是一个容器 连续的存储单元 2 数组的好处 自动给数组中的元素从零开始编号 自动给下标 从零开始0 1 2 3 3 书写格式 元素类型 数组名 new 元素类型 元素 元素 元素 3 1
  • 新的一期AIGC训练营,9月16日开启#一起build anything

    时间 9月16号 周六 10 00 17 00地点 上海请自备电脑 window系统最佳 Mac也可以 现在早鸟报名 享受优惠价格 999 人 原价 1699 人 名额先到先得 早鸟报名还能获赠 699 AIGC知识库会员名额 新的一期训练
  • SRAM和SDRAM的区别

    DRAM 动态随机存取存储器 需要不断的刷新 才能保存数据 而且是行列地址复用的 许多都有页模式 SRAM 静态的随机存取存储器 加电情况下 不需要刷新 数据不会丢失 而且 一般不是行列地址复用的 SDRAM 同步的DRAM 即数据的读写需
  • C语言 弱定义

    说明 函数名称前面加上 WEAK属性修饰符称为 弱函数 类似C 的虚函数 链接时优先链接为非weak定义的函数 如果找不到则再链接带weak函数 意义 这种自动选择的机制 在代码移植和多模块配合工作的场景下应用较多 例如前期移植代码 需要调
  • 完全卸载docker

    停止docker服务 systemctl stop docker 列出所有docker相关组件 yum list installed grep docker 删除上一条命令列出来的所有组件 yum y remove xxxx 谨慎操作 删除
  • 因果推断(五)——反事实,后悔药?

    反事实推断一个词概括就是 后悔 例子 还是以小夏开店为例 小夏请了A明星代言后 销售量虽然有提升 但是由于该明星的代言费很贵 导致最终还是亏本了 于是 小夏想要是当时没有请明星代言 会不会就不亏本了 推断没有发生过的事情 就是反事实推断 当
  • shell编程基础(四)-shell特殊符号

    目录 符号总览 1 输出 输入重导向 1 井号 comments 1 帐户的 home 目录 1 分号 Command separator 1 连续分号 Terminator 1 点 dot 2 string 单引号 single quot
  • k8s leaderelection

    const LEASELOCKNAME tes LEASELOCKNAMESPACE kube system func main LeaseLockID uuid New String client InitClientSet run fu
  • 少儿机器人编程与软件编程区别

    现在社会 机器人编程是一门博大精深 有着多学科融合性的课程 针对少儿方面 林林总总的相关编程培训也是层出不穷 格物斯坦来分析下这两者的区别所在 纯软件是个虚拟的世界 简单而完美 就像我们上学时所说的理想条件下 而真实世界太复杂了 并且总有意
  • 十分钟了解MES系统的发展历程和标准体系

    在20世纪70年代后期到21世纪这阶段 企业之间的主要竞争因素发生了较大的变化 客户对产品的需求逐渐多样化 制造企业的生产模式也开始由大批量的刚性生产变为了多品种 小批量的柔性生产模式 生产线也从以前的手工方式转为了以自动化的机器人生产线为
  • 使用R语言中的data

    使用R语言中的data table包进行数据操作和转换是非常高效和方便的 其中 melt函数是一个非常实用的函数 可以将数据表从宽格式转换为长格式 在本文中 我将详细介绍如何使用melt函数 以及通过源代码示例展示其用法和效果 1 什么是宽
  • Java什么情况下数据类型可以自动转换?什么情况下需要强制转换?

    在程序中 当把一种数据类型的值赋给另一种数据类型的变量时 需要进行数据类型转换 自动类型转换也叫隐式类型转换 指的是两种数据类型在转换的过程中不需要显式地进行声明 当把一个类型取值范围小的数值直接赋给另一个取值范围大的数据类型变量时 系统就
  • minikube:部署一个nginx应用

    通过run命令运行pod 创建pod minikube kubectl run nginx image nginx port 80 查看pod的ip minikube kubectl get pods o wide 遇到查看不到IP的问题可

随机推荐

  • 关于自定义视图容器(Container View Controller)

    苹果对UIViewController以及其使用有着非常详细的文档 UIViewController Reference ViewController Programming Guide 一 UIViewController 作为iOS开发
  • 惠普笔记本重装win10系统教程

    惠普PAVILION 15 AU034TX X0S89PA 重装系统教程 文章目录 惠普PAVILION 15 AU034TX X0S89PA 重装系统教程 1 Bios设置启动盘 2 开始重装系统操作 3 电脑基本设置 4 激活win10
  • python源程序执行的方式是边编译边执行吗_Python代码是编译执行还是解释执行?...

    有人在讨论 Python 代码是编译执行还是解释执行 这个问题还可以换一种说法 Python 是编译型语言还是解释型语言 回答这个问题前 我们先弄清楚什么是编译型语言 什么是解释型语言 所谓编译执行就是源代码经过编译器编译处理 生成目标机器
  • MySQL存储过程专题

    文章目录 MySQL存储过程 0 环境说明 1 使用说明 2 准备 3 语法 3 0 语法结构 3 1 变量及赋值 1 局部变量 2 用户变量 3 会话变量 4 全局变量 3 2 入参出参 3 3 流程控制 判断 if case 3 4 流
  • Python反编译exe

    TOC Python反编译exe 下载工具 1 python国内下载 https mirrors huaweicloud com python 建议使用 3 10一下的版本 2 下载 下载pyinstxtractor 网址 https gi
  • Python-pandas-画柱状图/饼图

    一 柱状图 import pandas as pd pandas的制图功能是构建在matplotlib之上的 import matplotlib pyplot as plt 1 使用pandas画图 datas pd read excel
  • git rm -r cached <dir>按层次遍历目录导致删除目录下文件时“未匹配任何文件“错误

    haypin MBP cpp cmake js java python main git add haypin MBP cpp cmake js java python main find ipath js o ipath build o
  • Qt窗口大小设置

    用Qt创建一个窗口 如何调整窗口的大小呢 1 setBaseSize 调用这个方法 1 setBaseSize 800 600 运行程序 发现一点效果都没有 注意我这里并没有使用setFixedSize setMaximumSize 因为虽
  • LightGBM原理简介

    1 LightGBM简介 Light Gradient Boosting Machine 是一个实现GBDT算法的框架 支持高效率的并行训练 并且具有以下优点 1 更快的训练速度 2 更低的内存消耗 3 更好的准确率 4 分布式支持 可以快
  • 智能指针详细解析(智能指针的使用,原理解析)

    本文转自努力的少年博主 https blog csdn net sjp11 article details 123899141 目录 一 智能指针的基本概念 二 智能指针的定义和使用 三 auto ptr 四 unique ptr 五 sh
  • 在群晖上安装Nextcloud-AIO详解

    本文是应网友 刘源 的要求折腾的 什么是 Nextcloud AIO Nextcloud AIO 就是 Nextcloud All in One 顾名思义就是一个 Nextcloud 的 All in One 版本 这是一个基于 Docke
  • 图解浏览器缓存,教你提高用户体验

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由前端林子发表于云 社区专栏 浏览器缓存 是浏览器端保存数据 用于快速读取或避免重复资源请求的优化机制 有效的缓存使用可以避免重复的网络请求和加快页面速度 从而提高用户体验 一
  • 2021上海交大网络安全保研夏令营经验

    个人情况 某985高校信息安全专业 排名前6 六级539 校级一等奖学金多次 竞赛 数模美赛m奖 数模国赛省二等 科研 无成果发表 只有一些实验室 校级项目经历 一 选拔流程 各学科组织专家组对申请者进行全面考查 形式为线下复试包括笔试和面
  • ORACLE-电信行业解决方案研讨会笔记

    ORACLE近况 08财年收入224亿美元10W员工中国2100 员工 中间件 理念COMPLETE OPEN INTEGRATED产品策略 开发工具 JDeveloper为oracle 的将来开发工具 BEA workshop向Jdeve
  • Requests爬虫方法

    目录 一 Requests 简介 1 1 requests是什么 1 2 安装 1 3 response的属性及类型 二 requests使用 2 1 requests 的 get 请求 2 2 requests 的 post 请求 2 3
  • LRU 最近最少使用算法

    LRU 最近最少使用算法 设计LRU Cash 数据结构 设计方法 代码实现 总结 百度百科 LRU是Least Recently Used的缩写 即最近最少使用 是一种常用的页面置换算法 选择最近最久未使用的页面予以淘汰 该算法赋予每个页
  • 项目打War 并部署到Tomcat上去(注重步骤)

    一 打包 点开我们idea 中对应的maven 在对应模块中找到有 root 的那个模块 进行package 打包 打包完成后 去对应的路径下找到刚打的新鲜war包 进入bin 目录后 双击startup bat 运行即可
  • java几种删除_几种删除Linux目录的方法

    在Linux中有很多方法可以删除目录 在图形化界面可以利用文件管理器 或者通过终端删除 本文将介绍在文本界面使用命令删除目录 使用rmdir删除目录 Rmdir命令间成 remove directory 用于删除空目录的命令 例如 删除一个
  • Spring Boot 整合 JSON - Jackson/Gson/FastJson

    学习 Spring Boot 整合 JSON Jackson Gson FastJson 1 Spring MVC 整合 JSON 先来回顾下在 Spring MVC 中如何整合 JSON Spring MVC 可以接收 JSON 参数 也
  • BeanUtils.copyProperties基本用法与小坑

    1 实际应用 BeanUtils copyProperties 赋值目标对象 模板源对象 我们都知道当有两个对象AB 属性名称一样的情况下 如果需要把A的全部属性给B 传统写法是 B setXX A getXX 如果只有几个特别的参数需要赋