美文网首页
自定义开发-对象属性拷贝

自定义开发-对象属性拷贝

作者: CoderInsight | 来源:发表于2022-10-28 15:17 被阅读0次

1,工具类的特征

  • 完成基本的属性复制功能;
  • 不同类型的属性赋值,比如常见的基本类型与包装类型;
  • 深拷贝和浅拷贝,注意在浅拷贝的时候,会引用同一个对象。

2,分析常见的集中对象拷贝的工具类

  • Apache BeanUtils
  • Spring BeanUtils
  • Cglib BeanCopier
  • Dozer
  • orika
  • MapStruct

在通常的业务中,如果不是说存在不同类型、不他那个字段名这样的情况可以直接使用Spring BeanUtils工具类,可以满足绝大多数场景,如果有特殊的需求的话,可以使用orika等重量级的工具,可以参考连接。

(1),Apache BeanUtils

  • 依赖:
<dependency> 
    <groupId>commons-beanutils</groupId> 
    <artifactId>commons-beanutils</artifactId> 
    <version>1.9.4</version> 
</dependency> 
  • 使用(注意对应依赖的引入)
// DTO 对象转化到 DO 对象
BeanUtils.copyProperties(studentDO, studentDTO); 
  • 分析结论
    • 1,嵌套对象字段,将会与源对象使用同一对象,即使用浅拷贝
    • 2,类型不一致的字段,会默认将其进行类型转化;
    • 3,但是其在内部实现中,使用了很多反射,做了很多校验,所以导致性能较差,所以在阿里的开发手册是强制规定避免使用 Apache BeanUtils。

(2),Spring BeanUtils

这里只是针对实体类会生效,而针对List集合直接赋值的话会失败,可能还要进一步的处理。

  • 依赖

这里是通过单独引用说明的,但是实际上在实际的springboot-start依赖的父依赖中是已经有这个类了,我们可以直接使用(待验证:但是在实际编程中确实没有明确的引入这个依赖,也是可以使用的)。

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>5.2.8.RELEASE</version> 
</dependency> 
  • 使用

注意:在复制对象的时候,顺序是A->B,则就是A复制到B。

// DTO 对象转化到 DO 对象
BeanUtils.copyProperties(studentDTO, studentDO); 

// 另外该方法还有一个重载的方法,即可以设置忽略不想复制过去的属性 
BeanUtils.copyProperties(studentDTO, studentDO,"name");
  • 分析结论
    • 1,类型不一致,属性无法复制。但是注意,如果类型为基本类型以及基本类型的包装类,这种可以转化
    • 2,嵌套对象字段,将会与源对象使用同一对象,即使用浅拷贝

参考资料

1,七种对象复制工具类,阿粉该 Pick 谁?

相关文章

  • 自定义开发-对象属性拷贝

    1,工具类的特征 完成基本的属性复制功能; 不同类型的属性赋值,比如常见的基本类型与包装类型; 深拷贝和浅拷贝,注...

  • oc 浅拷贝与深拷贝

    1. 先说结论: 分可变对象、不可变对象、自定义对象、容器对象几种: 例子参考: iOS开发——深拷贝与浅拷贝详...

  • 深入理解OC面向对象

    目录 1.面向对象1.三要素2.属性 2.深拷贝与浅拷贝1.Foundation框架中的对象2.自定义对象 3.对...

  • 15.深浅拷贝

    浅拷贝:就是当被拷贝的对象的某个属性值为引用类型时,拷贝的对象会将被拷贝的对象的这个属性的引用的地址拷贝过来,这样...

  • JAVA设计模式:原型模式与拷贝

    深拷贝与浅拷贝 浅拷贝:对象A进行赋值操作得到对象B,这就是浅拷贝,修改对象A的属性会影响到B的属性 深拷贝:深拷...

  • 深拷贝和浅拷贝

    什么是深拷贝和浅拷贝 浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的...

  • 探寻深浅拷贝

    1.前言 开发过程中常常需要拷贝属性、容器、模型,修改拷贝对象,是否会对原对象产生影响等,这就是 copy与mut...

  • 深浅拷贝

    深浅拷贝的定义 浅拷贝 创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基...

  • 面试题:Strong和Copy的区别

    什么是浅拷贝和深拷贝 浅拷贝:并不拷贝对象本身,只是对指向对象的指针进行拷贝,改变原对象的属性会影响新的对象,内存...

  • 继承和函数进阶

    对象之间的继承 (对象拷贝) 使用for...in结构进行遍历拷贝属性,子级对象已经有的属性就无需再继承父级对象的...

网友评论

      本文标题:自定义开发-对象属性拷贝

      本文链接:https://www.haomeiwen.com/subject/ddhftdtx.html