美文网首页
BeanUtils.copyProperties遇到的小坑

BeanUtils.copyProperties遇到的小坑

作者: wangxiaoyu | 来源:发表于2018-09-25 11:55 被阅读0次

    主要问题描述:两个对象分别由同一个对象copy过来,对象中有一个成员变量是Map,用该map的时候是同一个引用对象。
    BeanUtils类全路径为org.springframework.beans.BeanUtils

    类大致如下:

    @Data
    class A {
        private Integer id;
        private Map<Integer,String> map = new HashMap<>();
    }
    

    问题代码

    A source = new A();
    source.setId(1);
    A copy1 = new A();
    BeanUtils.copyProperties(source, copy1);
    A copy2 = new A();
    BeanUtils.copyProperties(source, copy2);
    copy1.getMap().put(1,"1");
    copy2.getMap().put(1,"2");
    System.out.println(copy1.getMap().get(1));
    //以为是"1",实际是"2"
    System.out.println(copy2.getMap().get(1));
    //"2"
    System.out.println(copy1.getMap() == copy2.getMap());
    //true,直接对比引用
    

    原因分析,BeanUtils.copyProperties利用反射,直接将对象的引用set进去,并不是深拷贝。

    相关文章

      网友评论

          本文标题:BeanUtils.copyProperties遇到的小坑

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