介绍
org.springframework.beans.BeanUtils.copyProperties(Object, Object)是spring 框架的对象工具类:BeanUtils下的一个拷贝对象属性的方法。
官方注释
把给定的源对象属性值拷贝到目标对象中。
注意:源对象类与目标对象类不一定非要完全匹配,也不必要由哪一方派生,只要属性匹配就可以。任何源对象的暴露在外的而目标对象没有暴露的属性都将默认忽略。
这只是一个简便的方法。对于更复杂的转换需要,请考虑使用完整的BeanWrapper(BeanWrapper.class)。
应用
这个静态方法实际上就是根据对象属性的Set方法名来匹配的,Set方法名一致则可以拷贝成功,如果不一致则就算属性名相同也不会拷贝成功。
不过一般情况下,Set方法是根据属性名自动生成的,那么同样的Set名一定是由同样的属性名生成的。所以只要保证属性名一致,生成Set后不重构属性名就不会有问题。因为对象属性重构之后不会修改Set方法名,因此如果导致了重构后属性名与Set方法名不对应,就可能copy属性失败。
可以结合映射的方式对其进行调用,如下所示:
public static <T> T copy(Object srcObj, Class<T> destClass) {if(srcObj == null) {return null;}T destObj = null;try {destObj = destClass.newInstance();} catch (InstantiationException | IllegalAccessException e) {throw new RuntimeException(e);}BeanUtils.copyProperties(srcObj, destObj);return destObj;}
注意,这样的方式是通过目标类的class对象来生成一个新的目标对象,从而复制属性,也就是说,如果需要把源对象中的属性放入一个新的对象中,可以用上面的进一步封装,但如果是一个已经有部分属性的目标对象,那么依然要直接使用copyProperties()方法。