zoukankan      html  css  js  c++  java
  • 动态生成javaBean

    ​ 通过Map动态生成JavaBean ,生成的JavaBean只有对应属性的get,set方法。

    工具类
    package com.fongtech.cli.common.util;
    
    import org.springframework.cglib.beans.BeanGenerator;
    import org.springframework.cglib.beans.BeanMap;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 通过Map动态生成JavaBean ,生成的JavaBean只有对应属性的get,set方法。
     */
    public class BeanCeater {
        public static Object generateObject(Map properties) {
            BeanGenerator generator = new BeanGenerator();
            Set keySet = properties.keySet();
            for(Iterator i = keySet.iterator(); i.hasNext();) {
                String key = (String)i.next();
                generator.addProperty(key, (Class)properties.get(key));
            }
            return generator.create();
        }
    
        public static Object getValue(Object obj, String property) {
            BeanMap beanMap = BeanMap.create(obj);
            return beanMap.get(property);
        }
    
        public static void setValue(Object obj, String property, Object value) {
            BeanMap beanMap = BeanMap.create(obj);
            beanMap.put(property, value);
        }
    }
    
    
    使用
    		Map properties = new HashMap();
            properties.put("id", Class.forName("java.lang.Integer"));
            properties.put("name", Class.forName("java.lang.String"));
            properties.put("address", Class.forName("java.lang.String"));
            Object stu = generateObject(properties);
    
            System.out.println("Set values");
            setValue(stu, "id", 123);
            setValue(stu, "name", "454");
            setValue(stu, "address", "789");
    
            System.out.println("Get values");
            System.out.println(">> " + getValue(stu, "id"));
            System.out.println(">> " + getValue(stu, "name"));
            System.out.println(">> " + getValue(stu, "address"));
    
            System.out.println("Show all methods");
            Method[] methods = stu.getClass().getDeclaredMethods();
            for(Method method : methods) {
                System.out.println(">> " + method.getName());
            }
    
            System.out.println("Show all properties");
            Field[] fields = stu.getClass().getDeclaredFields();
            for(Field field : fields) {
                System.out.println(">> " + field.getName());
            }
    
  • 相关阅读:
    leetcode【dynamic】【0】
    VIM 常用指令
    《Java多线程编程核心技术》笔记
    log4j配置文件详解
    CSU 1803 2016(同余公式)2016年湖南省第十二届大学生计算机程序设计竞赛
    NYOJ 1233 差值(字符串排序+大数减法)
    HDU 5723 Abandoned country(最小生成树+DFS)
    POJ 1451 T9 字典树
    POJ 2965 The Pilots Brothers' refrigerator 状态压缩+广搜
    POJ 1753 Flip game状态压缩+广搜
  • 原文地址:https://www.cnblogs.com/superlinb/p/13176134.html
Copyright © 2011-2022 走看看