BeanUtils.copyProperties浅拷贝问题解决

  • A+
所属分类:Java Spring SpringBoot

在java开发中,BeanUtils.copyProperties是绕不开的,一般来说,如果只是在返回结果时用这个来复制下对象值去返回是没有问题的,但是如果需要修改对象的值,那么用BeanUtils.copyProperties可能就有坑了。

先说结论:BeanUtils.copyProperties是浅拷贝,不是深拷贝!!!比如一个类User,里面有一个成员属性IdCard,也是一个类,里面有属性name和id两个属性。如果此时,使用BeanUtils.copyProperties(user1, user2)。那么此时如果修改了user2中的idCard,那么你会发现user1里的idCard也会被改了!!!这就是因为是浅拷贝,因为user1和user2中的idCard是指向同一个对象。

所以问题来了,如何解决浅拷贝的问题呢?我们可以使用Apache Commons Lang中提供的SerializationUtils工具实现

首先User类和IdCard类都要实现Serializable接口

然后就可以去深拷贝

User user2 = SerializationUtils.clone(user1);
ZPY

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: