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());
    }

打印结果 :

总结

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

相关文章

  • spring security自定义决策管理器

    spring security自定义决策管理器

    这篇文章主要介绍了spring security自定义决策管理器的实现代码,需要的朋友参考下吧
    2017-09-09
  • Spring中使用自定义ThreadLocal存储导致的坑及解决

    Spring中使用自定义ThreadLocal存储导致的坑及解决

    这篇文章主要介绍了Spring中使用自定义ThreadLocal存储导致的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring利用@Validated注解实现参数校验详解

    Spring利用@Validated注解实现参数校验详解

    这篇文章主要为大家详细介绍了在 Spring 项目中使用 @Validated 进行参数校验的方法和常见应用场景,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-05-05
  • Spring AOP方法内部调用不生效的解决方案

    Spring AOP方法内部调用不生效的解决方案

    最近有个需求,统计某个方法的调用次数,开始使用 Spring AOP 实现,后来发现当方法被内部调用时,切面逻辑将不会生效,所以本文就给大家介绍了Spring AOP方法内部调用不生效的解决方案,需要的朋友可以参考下
    2025-01-01
  • CORS跨域问题常用解决方法代码实例

    CORS跨域问题常用解决方法代码实例

    这篇文章主要介绍了CORS跨域问题常用解决方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • JAVA 根据Url把多文件打包成ZIP下载实例

    JAVA 根据Url把多文件打包成ZIP下载实例

    这篇文章主要介绍了JAVA 根据Url把多文件打包成ZIP下载的相关资料,需要的朋友可以参考下
    2017-08-08
  • Java中Date与LocalDate的区别及使用指南

    Java中Date与LocalDate的区别及使用指南

    在 Java 中处理时间和日期是开发中非常常见的需求,许多老项目仍然使用 java.util.Date,而现代 Java 程序推荐使用 Java 8 引入的 java.time API 中的类,比如 LocalDate,本文将详细比较这两者的区别,以及在实际项目中应该如何选择使用,需要的朋友可以参考下
    2026-03-03
  • 使用Springboot整合GridFS实现文件操作

    使用Springboot整合GridFS实现文件操作

    这篇文章主要介绍了使用Springboot整合GridFS实现文件操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java设计模式中桥接模式应用详解

    Java设计模式中桥接模式应用详解

    桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例详细介绍了桥接模式的原理与使用,需要的可以参考一下
    2022-11-11
  • IntelliJ IDEA版Postman强大功能介绍

    IntelliJ IDEA版Postman强大功能介绍

    这篇文章主要为大家介绍了IDEA版Postman的强大功能介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论