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());
            }
    
  • 相关阅读:
    欧拉项目第十题;用筛法做,
    欧拉第十题 求2000000以内的素数之和
    求1000数字中13个相乘最大值
    筛法求10000以内的质数
    判断回文且寻找三位数乘三位数里最大的回文
    分解质因数
    输入一个正整数n,将其转换为二进制后输出。要求定义并调用函数dectobin(n),它的功能是输出
    hdu1863最小生成树krus模板&prim模板
    hdu 3870 最小割转化为最短路径2
    UVALive 3661 最小割转化为最短路径
  • 原文地址:https://www.cnblogs.com/superlinb/p/13176134.html
Copyright © 2011-2022 走看看