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

cglib

是一个开源项目!

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

简单样例—动态生成bean

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

需要导入cglib-nodep-2.2.jar

been类

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

再写一个测试类

  1. package com.infotech.cglibTest;
  2. import java.lang.reflect.Method;
  3. import java.util.HashMap;
  4. /**
  5. * Cglib测试类
  6. * @author cuiran
  7. * @version 1.0
  8. */
  9. public class CglibTest {
  10. @SuppressWarnings("unchecked")
  11. public static void main(String[] args) throws ClassNotFoundException {
  12. // 设置类成员属性
  13. HashMap propertyMap = new HashMap();
  14. propertyMap.put("id", Class.forName("java.lang.Integer"));
  15. propertyMap.put("name", Class.forName("java.lang.String"));
  16. propertyMap.put("address", Class.forName("java.lang.String"));
  17. // 生成动态 Bean
  18. CglibBean bean = new CglibBean(propertyMap);
  19. // 给 Bean 设置值
  20. bean.setValue("id", new Integer(123));
  21. bean.setValue("name", "454");
  22. bean.setValue("address", "789");
  23. // 从 Bean 中获取值,当然了获得值的类型是 Object
  24. System.out.println("  >> id      = " + bean.getValue("id"));
  25. System.out.println("  >> name    = " + bean.getValue("name"));
  26. System.out.println("  >> address = " + bean.getValue("address"));
  27. // 获得bean的实体
  28. Object object = bean.getObject();
  29. // 通过反射查看所有方法名
  30. Class clazz = object.getClass();
  31. Method[] methods = clazz.getDeclaredMethods();
  32. for (int i = 0; i < methods.length; i++) {
  33. System.out.println(methods[i].getName());
  34. }

使用cglib动态创建java类的更多相关文章

  1. 使用cglib动态创建javabean

    动态创建javabean对于我们进行开发,会有一定的帮助,一下是使用cglib动态创建javabean的一个例子: 先贴上code: package com.dalong.CreateCode; im ...

  2. 一种从JSON数据创建Java类的高效办法

    <一种从JSON数据创建Java类的高效办法> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs JSON格式的数据经常会遇到,比如调用Web服 ...

  3. 创建java类并实例化类对象

    创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...

  4. Eclipse 创建 Java 类

    打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Cla ...

  5. Eclipse 创建 Java 类---Eclipse教程第10课

    打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Cla ...

  6. 利用MAP动态创建C++类对象

    MFC的CRuntimeClass利用链表实现了C++类的动态创建.但是如果项目中对动态创建的要求比较低,我们完全可以利用map实现简单的动态创建. http://blog.csdn.net/yeji ...

  7. silverlight依据json字符串动态创建实体类

    1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json);   ...

  8. 创建Java类并实例化深入理解

    package com.sanguosha.java; import java.util.Scanner;//导入包 public class TestPerson { public static v ...

  9. 创建Java类并实例化的基本过程

    package com.sanguosha.java; /* * 面向对象实现的过程 * 1.创建类并设计类的成员(成员变量即属性and成员方法即方法) * 2.通过类来创建类的对象,也称类的实例化 ...

随机推荐

  1. poj2299

    好吧,看到这个图片就知道是干什么的了,求逆序数- - 可以用线段树,貌似还可以用归并排序,这题应该是考的归并排序,毕竟是递归分治- - 基本上都忘了,再写一写试试吧. AC ///////////// ...

  2. Linux 相关scsi命令

    Linux 相关scsi命令 由于前段时间存储扩容,对存储操作较多,下面记录了常用的操作: lsscsi命令:显示scsi设备信息 #lsscsi [0:0:0:2]    disk    IBM   ...

  3. Effect of Switchovers, Failovers, and Control File Creation on Backups

    对dataguard 官方文档里面的这句话不理解,是否能给出一个样例说明: 10.2.0.5的版本号 Effect of Switchovers, Failovers, and Control Fil ...

  4. sparkSQL1.1入门之二:sparkSQL执行架构

          在介绍sparkSQL之前.我们首先来看看,传统的关系型数据库是怎么执行的.当我们提交了一个非常easy的查询: SELECT a1,a2,a3 FROM tableA Where con ...

  5. PHP 計算字符串長度函數

    PHP內置的字符串長度函數strlen無法正確處理中文字符串,它得到的只是字符串所占的字節數.對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差 ...

  6. java 数据库两种连接方法

    package jdbc; import java.sql.*; public class ConnectionDemo2 { public static final String DBDRIVER= ...

  7. 谈谈iOS中粘性动画以及果冻效果的实现

    在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: https://github.c ...

  8. 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式

    第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...

  9. java.util.Date和java.sql.Date

    java.util.Date是在除了SQL语句的情况下面使用的. java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分 它们都有getTime方法返回毫秒数,自然就可以直接构建 ...

  10. HDU 5033 Building(单调栈维护凸包)

    盗张图:来自http://blog.csdn.net/xuechelingxiao/article/details/39494433 题目大意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度, ...