BeanUtils.copyProperties是Apache Commons BeanUtils的一个工具类,用于拷贝两个JavaBean之间的属性,简化了JavaBean对象之间的拷贝代码。在使用 BeanUtils.copyProperties时需要注意以下几个问题:
1.参数类型必须一致
BeanUtils.copyProperties 用于拷贝两个JavaBean之间的属性,需要保证参数的类型一致。如果参数类型不一致,拷贝过程就无法完成。
2.属性名称必须一致
BeanUtils.copyProperties 会拷贝源对象中所有可读可写的属性,但是属性名称必须一致,否则目标对象中对应的属性将不会被赋值。
3.源对象的属性必须是可读的
BeanUtils.copyProperties 需要读取源对象中的所有属性,因此源对象的属性必须是可读的。
4.目标对象的属性必须是可写的
BeanUtils.copyProperties 需要将源对象的属性值赋给目标对象的属性,因此目标对象的属性必须是可写的。
5.属性类型必须兼容
BeanUtils.copyProperties 需要将源对象的属性值转换为目标对象的属性值,因此属性类型必须是兼容的。如果源对象属性类型无法转换为目标对象属性类型,拷贝过程就无法完成。
使用方法:
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
public class Main {
public static void main(String[] args) {
SourceBean sourceBean = new SourceBean("sourceName", 20, "source_address");
TargetBean targetBean = new TargetBean();
try {
// 拷贝属性
BeanUtils.copyProperties(targetBean, sourceBean);
// 拷贝指定属性
PropertyUtils.copyProperties(targetBean, PropertyUtils.describe(sourceBean));
System.out.println(targetBean);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意: 此处我们使用了 PropertyUtils.describe 来转换 java bean 为 Map<String,String> ,然后还原回 另一个 bean。 这个工具类是有限制的,它的属性必须是能够被 get 方法获取的。 如果有属性没有开放 getter 方法是无法通过这种方式拷贝出来的。