javaWeb开发过程中,经常需要在领域类之间进行实体对象的拷贝操作,比如把Po类的属性值拷贝给Dto类。

BeanUtils这种工具类应用而生,比如org.apache.commons包中的BeanUtils就提供copyProperties(Object dest, Object orig)方法,它方便开发者快速在俩个对象之间进行字段值的拷贝。而且,拷贝条件非常简单:拷贝实体类之间只要保证字段名称一样即可。

尽管BeanUtils好用而且便捷,将开发者从繁重的get set操作中解放出来,但是笔者不太推荐使用他,原因有三。

1、字段名必须一样

虽然俩个拷贝类之间,需要拷贝的属性字段名必须要一样,当它们字段值不一样的时候,这时候就需要手动获取并赋值。当俩个实体类存在个别字段不一样时开发者容易忽视他,而忘记手动设置。

比如Po类的用户名叫 uName(数据库字段u_name),而Dto类因为是给其他模块调用的所以写有阅读意义的全程userName,这时候我们就必须手动设置
dtoObj.setUserName(poObj.getuName())

2、性能问题

BeanUtils内部实现采用的是反射功能,当反射的操作数量达到万级别的话,耗时非常明显。笔者亲自试过,对五万条数据进行拷贝操作,能明显感觉到卡顿。所以说BeanUtils是一个用性能换时间的得不偿失的买卖。

3、泛型擦除问题

在进行集合直接的数据拷贝时,因为泛型擦除问题,导致拷贝失效。比如我们需要将Po集合列表转化为Dto的集合,因为泛型擦除问题,最终得到的还是Po的集合。

慎用BeanUtils的对象拷贝方法相关推荐

  1. 对象拷贝 Apache BeanUtils与Spring BeanUtils性能比较

    前言 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进 ...

  2. Bean对象的拷贝方法BeanCopier和BeanUtils

    1. BeanCopier 默认只复制名称和类型相同的字段,对date为空的情况不进行复制.把相同的进行复制,把不同的,也就是需要我们个性化的一些字段,单独出来用set来赋值,这样程序就会很明确,重点 ...

  3. beanutils copyproperties_你还在用BeanUtils进行对象属性拷贝?

    作者:Van_Fan 在做业务的时候,为了隔离变化,我们会将DAO查询出来的DO和对前端提供的DTO隔离开来.大概90%的时候,它们的结构都是类似的:但是我们很不喜欢写很多冗长的b.setF1(a.g ...

  4. 对象拷贝之Apache BeanUtils、Spring的BeanUtils、Mapstruct、BeanCopier、PropertieyUtils对比(深拷贝)

    大多时候时候使用的是Apache或Spring``BeanUtils,今天,我们来看一下一个更高效的属性拷贝方式:BeanCopier. https://github.com/cglib/cglib ...

  5. java实例拷贝,Apache Commons包 BeanUtils 对象拷贝实例demo

    Apache Commons包 BeanUtils 对象拷贝实例demo 发布时间:2019-05-08作者:laosun阅读(1846) Apache Commons包 BeanUtils 对象拷贝 ...

  6. vue js对象拷贝的方法简单易用

    对象拷贝的方法是一个难点,尤其是深拷贝.建议把代码都运行下,帮助理解拷贝. 一. json方法 适合情况:  JSON对象的深度克隆.方法是先JSON.stringify() 转为json字符串, 再 ...

  7. 对象拷贝的工具类DeepBeanUtils

    创建一个对象拷贝的工具类 在Spring 开发框架内部提供有一个BeanUJtils工具类,这个工具类有一个最大的特点就是可以直接实现对象的数据的拷贝操作,可是这个拷贝操作不包含有集合数据的拷贝处理. ...

  8. java 实例对象拷贝,实例详解java对象拷贝

    这篇文章主要介绍了java对象拷贝详解及实例的相关资料,需要的朋友可以参考下 java对象拷贝详解及实例 Java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的:@T ...

  9. 谈谈Java开发中的对象拷贝

    在Java开发工作中,有很多时候我们需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息.这两个对象实例有可能是同一个类的两个实例,也可能是不同类的两个 ...

最新文章

  1. PostgreSQL第一步:安装
  2. 彻底搞懂 Nginx 的五大应用场景
  3. [Android Pro] 由模块化到组件化(一)
  4. Pytorch使用CPU运行“Torch not compiled with CUDA enabled”
  5. linux排序语言,Linux sort 排序命令uniq去重复行
  6. MYSQL delete语句不支持别名?
  7. java实现删除指定指定目录下面指定某种类型的文件
  8. MFC中常见控件的操作
  9. 消息人士:欧盟下月将对英伟达收购Arm交易展开正式调查
  10. python学习之路---day12
  11. Python 帮助信息(pydoc模块)
  12. 机器学习中的矩阵分析与应用
  13. js ajax 异步上传图片,javascript实现图片伪异步上传
  14. 软件工程之图书管理系统总体设计
  15. linux系统安装爱快,ESXi安装爱快iKuai OS路由(图文教程)
  16. 浅析智慧消防应用中多设备联动火灾报警系统
  17. day 37 ajax跨域 浏览器同源测略
  18. CentOS7更换国内源以及安装补充更新源(安装nethogs)
  19. VFB组件:Picture控件(画板)
  20. 报Python培训班多少钱?报个班值得吗?

热门文章

  1. 【Android N7.0】Framework层实现派发HOME按键到Application层的一种简单方案
  2. 【转】IDA Pro7.0使用技巧总结
  3. bwt比对算法 C语言,python-bwt算法的编码和解码
  4. PICE(1):Programming In Clustered Environment - 集群环境内编程模式
  5. ESP32学习(1):ESP-IDF基于Visual Studio Code环境
  6. 基于微信小程序的多功能记事本软件开发 报告+前后台(java)项目源码+数据库
  7. iOS:关于APP架构设计的简单理解
  8. 2021最新Java笔经,王者笔记!
  9. 数字信号处理——采样定理
  10. 房地产已经绑架了中国经济和全中国的人民 ——何学林中国房地产大策划之一