ZPY博客

BeanUtils.copyProperties浅拷贝问题解决

在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);