BeanUtils.copyProperties 使用注意

简介: BeanUtils.copyProperties 使用注意

前言



首先结论说在前头, BeanUtils.copyProperties 是浅拷贝 。


为什么今天我还想把这个BeanUtils.copyProperties 的使用拿出来军训。


因为我意识到了大家(部分)对深拷浅拷还是不清晰,不知道具体的影响。


正文



示例演示:



第一个类:


image.png


第二个类:


image.png


注意!! 第二个类里面有使用第一个类。


开始进行示例:


    public static void main(String[] args) {
        /**
         * 模拟数据 A  complexObject
         */
        ComplexObject complexObjectA=new ComplexObject();
        complexObjectA.setNickName("张一");
        SimpleObject simpleObject=new SimpleObject();
        simpleObject.setName("李四");
        simpleObject.setAge(12);
        complexObjectA.setSimpleObject(simpleObject);
        /**
         * 使用BeanUtils.copyProperties 拷贝 模拟数据 A 生成模拟数据 B
         */
        ComplexObject complexObjectB=new ComplexObject();
        BeanUtils.copyProperties(complexObjectA,complexObjectB);
        System.out.println("拷贝后,查看模拟数据A 和 模拟数据B :");
        System.out.println(complexObjectA.getSimpleObject().toString());
        System.out.println(complexObjectB.getSimpleObject().toString());
        System.out.println("比较模拟数据A 和 模拟数据B 里面的引用对象simple 是否引用地址一样: ");
        System.out.println(complexObjectA.getSimpleObject()==complexObjectB.getSimpleObject());
        System.out.println("修改拷贝出来的模拟数据B里面的引用对象simple的属性 age 为 888888");
        complexObjectB.getSimpleObject().setAge(888888);
        System.out.println("修改后,观察原数据A 和拷贝出来的数据 B 里面引用的 对象 simple的属性 age:");
        System.out.println(complexObjectA.getSimpleObject().toString());
        System.out.println(complexObjectB.getSimpleObject().toString());
    }


image.png


最后强调:


如果你是使用BeanUtils.copyProperties 进行对象的拷贝复制, 一定要注意!


第一点 、你所拷贝的对象内包不包含 其他对象的引用。


第二点、如果包含,那么接下来的方法里无论是操作原对象还是操作拷贝出来的对象是否涉及到 对 对象内 的 那个其他对象的 值的修改 。


第三点、如果涉及到, 修改了,会不会影响到其他方法 对 修改值的使用情况。


就如文中例子, 如果传入过来的一个复杂对象数据A 里面引用了一个 user对象年龄age是10;

拷贝出一份数据B后,  操作 数据B的方法把 年龄age改成了88888;


那么后续其他方法用到数据A ,想用的是最初始的 age 为10 ,那么就用不到了,因为浅拷贝的原因受影响,age都变成88888 了。


ok,就提到这。

相关文章
|
12天前
|
XML Java Apache
Spring中的BeanUtils.copyProperties
`BeanUtils.copyProperties()` 是 Spring 框架提供的工具方法,用于将一个 JavaBean 对象的属性值复制到另一个 JavaBean 对象中。主要功能包括属性拷贝、简化代码、类型转换等。该方法基于反射实现,支持属性名匹配和赋值,但仅执行浅拷贝,不支持深拷贝。使用时需注意属性名称和类型匹配,以及处理 null 值等问题。
Spring中的BeanUtils.copyProperties
|
6月前
|
Java Apache
BeanUtils.copyProperties()用法总结
BeanUtils.copyProperties()用法总结
|
6月前
|
前端开发 Java 数据处理
BeanUtils.copyProperties的用法
BeanUtils.copyProperties的用法
|
5月前
|
Java Apache 开发者
介绍BeanUtils.copyProperties方法
介绍BeanUtils.copyProperties方法
|
6月前
|
Java API
beanutils.copyproperties
beanutils.copyproperties
|
Java Apache 数据库
Spring的BeanUtils的copyProperties方法
项目中遇到的情况是: 文件解析完之后将文件放在一个pojo里面
133 0
|
Java API
BeanUtils.copyProperties(A,B)字段复制
BeanUtils.copyProperties(A,B)字段复制
95 0
|
Java 测试技术 Spring
为什么不推荐使用 BeanUtils ?
为什么不推荐使用 BeanUtils ?
329 0
为什么不推荐使用 BeanUtils ?