BeanWrapper
看看spring官网怎么说的:
解读
BeanWrapper可以获取,设置bean的属性
应用
像对象复制,一般会使用BeanUtils,BeanCopier等等
场景
但是对于一些特殊的情景就难以上手了,比如我现在有一个对象里面有些属性有值,
另一个相同class 的对象也有另一部分没有值的属性,我想把它们set到另一个对象
里面,这个时候上面两个工具类就失去意义。
这时BeanWrapper可以上场了~
复制对应对象的相应属性到另一个对象,并且保留之前的属性值
工具类
/**
* 复制对象相应的属性
*
* @param obj1 被复制的对象
* @param obj2 复制的对象
* @param names 属性名称
* @return T
* @throws Exception 一旦复制出错将抛出错误
*/
public static <T> T setObjectProperty(T obj1, T obj2, String... names) throws Exception {
if (obj1 == null || obj2 == null) {
throw new Exception("被复制的对象或者复制对象为空");
}
if (StringUtils.isEmpty(names)) {
throw new Exception("属性名称为空");
}
BeanWrapper beanWrapper1 = new BeanWrapperImpl(obj1);
BeanWrapper beanWrapper2 = new BeanWrapperImpl(obj2);
for (String name : names) {
beanWrapper2.setPropertyValue(name, beanWrapper1.getPropertyValue(name));
}
return obj2;
}
names为属性的名称,如果这两个类没有这些属性名将会抛出异常!
注意
obj1和obj2都必须有set方法,也可以是@ Data注解,不然是没有权限去读取和写滴~
BeanWrapper获取属性的方法
我们可以看到可以通过set方法后面的单词小写获取值,当然如果属性是对象,通过对象.属性名获取对象里面的属性,还有数组以及map