BeanUtils.copyProperties遇到的小坑

2018-09-25  本文已影响0人  wangxiaoyu

主要问题描述:两个对象分别由同一个对象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进去,并不是深拷贝。

上一篇 下一篇

猜你喜欢

热点阅读