zoukankan      html  css  js  c++  java
  • 使用cglib动态创建javabean

    动态创建javabean对于我们进行开发,会有一定的帮助,一下是使用cglib动态创建javabean的一个例子:

    先贴上code:

    package com.dalong.CreateCode;

    import java.util.Iterator; import java.util.Map; import java.util.Set;

    import net.sf.cglib.beans.BeanGenerator; import net.sf.cglib.beans.BeanMap;

    public class CodeCreate {

      /**      * 实体Object      */ 

       private  Object object = null;   

       /**      * 属性map      */    

       private  BeanMap beanMap = null;

       public CodeCreate()

      {        

         super();    

       }         

       @SuppressWarnings("unchecked")    

       public CodeCreate(Map propertyMap) {      

        this.object = generateBean(propertyMap);     

        this.beanMap = BeanMap.create(this.object);   

       }     

       /**      * 给bean属性赋值      * @param property 属性名      * @param value 值      */    

        public void setValue(String property, Object value)

       {    

         beanMap.put(property, value); 

       }     

       /**      * 通过属性名得到属性值      * @param property 属性名      * @return 值      */    

        public Object getValue(String property)

       {    

         return beanMap.get(property);   

        }      

        /**      * 得到该实体bean对象      * @return      */    

         public Object getObject()

        {   

           return this.object;    

        }   

         /**     * @param propertyMap     * @return     */ 

         @SuppressWarnings("unchecked") 

          private Object generateBean(Map propertyMap)

        {    

            BeanGenerator generator = new BeanGenerator();    

           Set keySet = propertyMap.keySet();     

           for (Iterator i = keySet.iterator();

           i.hasNext();)

          {     

             String key = (String) i.next();   

             generator.addProperty(key, (Class) propertyMap.get(key));     

          } 

        //     generator.addProperties(generator, propertyMap);    // 简写的方式

            return generator.create();   

        } 

      }

    一下是测试的代码:

       

    package com.dalong.Test;

    import java.lang.reflect.Method; import java.util.HashMap;

    import com.dalong.CreateCode.CodeCreate;

    public class TestClassMain {

     public TestClassMain() {   // TODO Auto-generated constructor stub  }

     /**   * @param args   * @throws ClassNotFoundException   */  

    public static void main(String[] args) throws ClassNotFoundException

    {   

    // TODO Auto-generated method stub  

      // 设置类成员属性         

    HashMap propertyMap = new HashMap();       

          propertyMap.put("id", Class.forName("java.lang.Integer"));        

          propertyMap.put("name", Class.forName("java.lang.String"));      

          propertyMap.put("address", Class.forName("java.lang.String"));          

         // 生成动态 Bean         

         CodeCreate bean = new CodeCreate(propertyMap);   

            // 给 Bean 设置值       

         bean.setValue("id", new Integer(123));       

         bean.setValue("name", "454");          

         bean.setValue("address", "789");          

        // 从 Bean 中获取值,当然了获得值的类型是 Object        

         System.out.println("  >> id      = " + bean.getValue("id"));   

         System.out.println("  >> name    = " + bean.getValue("name"));     

         System.out.println("  >> address = " + bean.getValue("address"));       

         // 获得bean的实体       

         Object object = bean.getObject();      

          // 通过反射查看所有方法名      

         Class clazz = object.getClass();       

         Method[] methods = clazz.getDeclaredMethods();     

             for (int i = 0; i < methods.length; i++) {     

             System.out.println(methods[i].getName());     

          } 

       }

    }

         代码比较简单,在实际的使用过程中可以进行改进。

  • 相关阅读:
    学点 C 语言(39): 函数 使用函数的代价与内联函数(inline)
    学点 C 语言(35): 函数 递归
    学点 C 语言(34): 函数 关于变量(auto、static、register、extern、volatile、restrict)
    学点 C 语言(37): 函数 常量(const)参数
    带进度的文件复制 回复 "冷风无泪" 的问题
    如何把一个程序中 Edit 中的文本赋给另一个程序的 Edit ? 回复 "Disk_" 的问题
    学点 C 语言(32): 函数 返回值
    博客园电子期刊2011年12月刊发布啦
    上周热点回顾(12.261.1)
    上周热点回顾(1.21.8)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/3461047.html
Copyright © 2011-2022 走看看