Java关于BeabUtils.copyproperties的用法

 更新时间:2024年08月12日 16:46:05   作者:程序员阿伟  
这篇文章主要介绍了Java关于BeabUtils.copyproperties的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

关于BeabUtils.copyproperties用法

BeanUtils它提供了对java反射和自省API的包装。

它里面还有很多工具类,这里我们介绍一下copyProperties。

使用BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值,减少了代码工作量。

用法

BeanUtils.copyProperties("被赋值的对象", "被复制的对象");

注意

例子:BeanUtils.copyProperties(a, b)

  • 1、a和b可以是不同的类;
  • 2、b中的存在的属性,a中一定要有,但是a中可以有多余的属性。
  • 3、a中与b中相同的属性都会被替换,不管a中的属性是否有值。
  • 4、a、 b中的属性要名字相同,才能被赋值,不然的话需要手动赋值。
  • 5、Spring的BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法。
  • 6、spring和apache的copy属性的方法源和目的参数的位置正好相反,所以导包和调用的时候都要注意一下。

Spring中的BeanUtils.copyProperties方法是深拷贝还是浅拷贝

理解什么是浅拷贝 , 什么是深拷贝 ?

  • 拷贝 : 顾名思义 ,在 Java当中就是 将一个类 的 属性 通过 get 和 set 方法来 赋值 给到 另一个类当中的属性 .
  • 浅拷贝 : 如果是引用类型 , 那么目标对象拷贝的只是源对象的地址 (无论目标对象还是源对象的改变 , 它们都会一起发生改变)[引用的一个内存地址]
  • 深拷贝 : 即将源对象的属性值 全部复制到 目标对象相应属性 (复制完之后,它们之间是隔开的 , 没有任何关系 , 无论操作源对象 还是目标对象 都是对另一个没有影响)[将子对象的属性也拷贝过去]

BeanUtils.copyProperties方法是深拷贝还是浅拷贝?

  • 答 : 浅拷贝 .
  • 测试代码 :
public class User {
    private int id;
    private String username;// 用户姓名
    //get set方法此处省略
}
public class Person {
    private Object user;
    //get set方法此处省略
    }
@Test
public void CopyTest(){
        //创建对象
        User user=new User();
        user.setId(1);
        user.setUsername("对象1");
        Person oldPerson = new Person();
        oldPerson.setUser(user);

        Person newPerson = new Person();

        BeanUtils.copyProperties(oldPerson,newPerson);
        System.out.println(newPerson.getUser().toString());
        //输出地址
        System.out.println("oldPerson = " + oldPerson.getUser());
        System.out.println("newPerson = " + newPerson.getUser());
    }

打印结果 :

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一文教你如何使用Java灵活读取Excel内容

    一文教你如何使用Java灵活读取Excel内容

    这篇文章主要给大家介绍了关于如何使用Java灵活读取Excel内容的相关资料,读取Excel数据是Java开发中常见的任务,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 使用java.util.Timer实现任务调度

    使用java.util.Timer实现任务调度

    这篇文章主要为大家详细介绍了使用java.util.Timer实现任务调度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java线程池参数自定义设置详解

    java线程池参数自定义设置详解

    这篇文章主要为大家介绍了java线程池参数自定义设置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 详解spring security四种实现方式

    详解spring security四种实现方式

    这篇文章主要介绍了详解spring security四种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • java中MVC模式与三层架构

    java中MVC模式与三层架构

    这篇文章主要让我们理解MVC模式和三层架构的基础知识,有兴趣的同学可以阅读,借鉴参考一下
    2023-03-03
  • 一篇文章解决Java异常处理

    一篇文章解决Java异常处理

    这篇文章主要给大家介绍了关于如何通过一篇文章解决Java异常处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • javaweb上传下载实例完整版解析(下)

    javaweb上传下载实例完整版解析(下)

    这篇文章主要为大家详细解析了javaweb上传下载实例,本文重点在于文件下载功能的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • springboot之端口设置和contextpath的配置方式

    springboot之端口设置和contextpath的配置方式

    这篇文章主要介绍了springboot之端口设置和contextpath的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解Java中restTemplate的使用

    详解Java中restTemplate的使用

    这篇文章主要为大家详细介绍了Java中restTemplate用法的相关资料,文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下
    2022-11-11
  • Java 中使用数组存储和操作数据

    Java 中使用数组存储和操作数据

    本文将介绍Java中常用的数组操作方法,通过详细的示例和解释,帮助读者全面理解和掌握这些方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09

最新评论