Bean属性扩展器

143 阅读1分钟

实际工作场景中有需要根据业务数据动态生成VO的属性并赋值,于是请教大佬写出Bean动态属性扩展器的工具类。 实例代码:

public class BeanExtFieldHelper {

    public static Object populateExtField(Class<?> superClazz, Object baseObj, Map<String, String> propertyMap) {
        BeanGenerator beanGenerator = new BeanGenerator();
        beanGenerator.setSuperclass(superClazz);
        for (Map.Entry<String, String> entry : propertyMap.entrySet()) {
            beanGenerator.addProperty(entry.getKey(), entry.getValue().getClass());
        }
        Object obj = beanGenerator.create();
        try {
            org.springframework.beans.BeanUtils.copyProperties(baseObj, obj);
            for (Map.Entry<String, String> entry : propertyMap.entrySet()) {
                BeanUtils.setProperty(obj, entry.getKey(), entry.getValue());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}
public static void main(String[] args) {
    UserVo vo = new UserVo();
    vo.setFullName("春天的花");
    vo.setMobile("138");
    System.out.println("属性增加前:"+JSON.toJSONString(vo));
    Map<String, String> propertyMap = new HashMap<>();
    propertyMap.put("test", "888888");
    UserVo o = (UserVo) populateExtField(UserVo.class, vo, propertyMap);
    System.out.println("属性增加后:"+JSON.toJSONString(o));
}

image.png

参数说明:

  1. superClazz:返回值VO
  2. baseObj:基于此VO的copy属性
  3. propertyMap:属性名+属性值