如果有两个 Java Bean,有多个相同类型和命名的属性,可以使用 Spring 的 BeanUtils.copyProperties 快速将一个 Java Bean 对象的属性复制到另外一个 Java Bean 对象中。
Java Bean 定义中要求实现序列化接口,BeanUtils.copyProperties 不强制这一条。只要属性有 getter、setter 方法即可。
BeanUtils 类的全路径是:
属于 spring-beans 项目, gradle 中引入 spring-beans 即可:
也可以只引入 spring-context, spring-beans 是它的一个依赖:
本文中的示例,使用了 lombok,具体使用方式可参考Java Lombok 。
使用示例
定义 3 个 Java Bean
示例: 从 Person 到 Person
运行结果:
示例: 从 Person 到 Student
运行结果:
Person 比 Student 少了一个 address 属性,所以 Student 的 address 是 null。
示例: 从 Student 到 Person
运行结果:
示例: 从 Student 到 Student
上面的示例,其实已经够用了,但我们要注意一下,BeanUtils.copyProperties 是浅复制。
运行结果:
错误的使用示例
没有 setter、getter 方法的类,使用 BeanUtils.copyProperties 是没有效果的。
运行结果:
可以看到 person2 的name 和 age 都是默认值,复制没有效果。
类似的,下面的这些用法也是错误的: