• 使用cglib动态创建java类


    转至:http://ckwang17.iteye.com/blog/963881

    cglib

    是一个开源项目!

    是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。许多开源项目都用到了它,如Hibernate,Spring之类用它来实现动态代理。

     简单样例—动态生成bean

      样例说明:建立一个动态实体bean,使用cglib动态加入属性,和相应的get,set方法。

    需要导入cglib-nodep-2.2.jar

    been类

    Java代码  
    1. <strong>public class CglibBean {  
    2. /** 
    3.   * 实体Object 
    4.   */  
    5. public Object object = null;  
    6.   
    7. /** 
    8.   * 属性map 
    9.   */  
    10. public BeanMap beanMap = null;  
    11.   
    12. public CglibBean() {  
    13.   super();  
    14. }  
    15.   
    16. @SuppressWarnings("unchecked")  
    17. public CglibBean(Map propertyMap) {  
    18.   this.object = generateBean(propertyMap);  
    19.   this.beanMap = BeanMap.create(this.object);  
    20. }  
    21.   
    22. /** 
    23.   * 给bean属性赋值 
    24.   * @param property 属性名 
    25.   * @param value 值 
    26.   */  
    27. public void setValue(String property, Object value) {  
    28.   beanMap.put(property, value);  
    29. }  
    30.   
    31. /** 
    32.   * 通过属性名得到属性值 
    33.   * @param property 属性名 
    34.   * @return 值 
    35.   */  
    36. public Object getValue(String property) {  
    37.   return beanMap.get(property);  
    38. }  
    39.   
    40. /** 
    41.   * 得到该实体bean对象 
    42.   * @return 
    43.   */  
    44. public Object getObject() {  
    45.   return this.object;  
    46. }  
    47.   
    48. @SuppressWarnings("unchecked")  
    49. private Object generateBean(Map propertyMap) {  
    50.   BeanGenerator generator = new BeanGenerator();  
    51.   Set keySet = propertyMap.keySet();  
    52.   for (Iterator i = keySet.iterator(); i.hasNext();) {  
    53.    String key = (String) i.next();  
    54.    generator.addProperty(key, (Class) propertyMap.get(key));  
    55.   }  
    56.   return generator.create();  
    57. }  
    58. }  
    59. </strong>  

    再写一个测试类

    Java代码  
    1. package com.infotech.cglibTest;  
    2.   
    3. import java.lang.reflect.Method;  
    4. import java.util.HashMap;  
    5.   
    6. /** 
    7.  * Cglib测试类 
    8.  * @author cuiran 
    9.  * @version 1.0 
    10.  */  
    11. public class CglibTest {  
    12.       
    13.       
    14.       
    15.     @SuppressWarnings("unchecked")  
    16.     public static void main(String[] args) throws ClassNotFoundException {  
    17.   
    18.         // 设置类成员属性  
    19.         HashMap propertyMap = new HashMap();  
    20.   
    21.         propertyMap.put("id", Class.forName("java.lang.Integer"));  
    22.   
    23.         propertyMap.put("name", Class.forName("java.lang.String"));  
    24.   
    25.         propertyMap.put("address", Class.forName("java.lang.String"));  
    26.   
    27.         // 生成动态 Bean  
    28.         CglibBean bean = new CglibBean(propertyMap);  
    29.   
    30.         // 给 Bean 设置值  
    31.         bean.setValue("id", new Integer(123));  
    32.   
    33.         bean.setValue("name", "454");  
    34.   
    35.         bean.setValue("address", "789");  
    36.   
    37.         // 从 Bean 中获取值,当然了获得值的类型是 Object  
    38.   
    39.         System.out.println("  >> id      = " + bean.getValue("id"));  
    40.   
    41.         System.out.println("  >> name    = " + bean.getValue("name"));  
    42.   
    43.         System.out.println("  >> address = " + bean.getValue("address"));  
    44.   
    45.         // 获得bean的实体  
    46.         Object object = bean.getObject();  
    47.   
    48.         // 通过反射查看所有方法名  
    49.         Class clazz = object.getClass();  
    50.         Method[] methods = clazz.getDeclaredMethods();  
    51.         for (int i = 0; i < methods.length; i++) {  
    52.             System.out.println(methods[i].getName());
    53.         }  
  • 相关阅读:
    iOS5.1下emoji表情显示方框的解决办法
    iPhone处理图片(UIImage扩展类) 自动适应frame大小方法
    10个必需的iOS开发工具和资源
    转一篇:iOSOpenDev环境搭建以及使用
    自定义UITabbarController引发的血案
    (转) iphone开发资源汇总
    分类分享一下,关于push推送的经验吧
    关于IPHONE的设计模式
    IOS自动化打包介绍
    带有可变参数表的简化的printf函数
  • 原文地址:https://www.cnblogs.com/zxf330301/p/5798241.html
Copyright © 2020-2023  润新知