使用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类
- <strong>public class CglibBean {
- /**
- * 实体Object
- */
- public Object object = null;
- /**
- * 属性map
- */
- public BeanMap beanMap = null;
- public CglibBean() {
- super();
- }
- @SuppressWarnings("unchecked")
- public CglibBean(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;
- }
- @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));
- }
- return generator.create();
- }
- }
- </strong>
再写一个测试类
- package com.infotech.cglibTest;
- import java.lang.reflect.Method;
- import java.util.HashMap;
- /**
- * Cglib测试类
- * @author cuiran
- * @version 1.0
- */
- public class CglibTest {
- @SuppressWarnings("unchecked")
- public static void main(String[] args) throws ClassNotFoundException {
- // 设置类成员属性
- 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
- CglibBean bean = new CglibBean(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());
- }
使用cglib动态创建java类的更多相关文章
- 使用cglib动态创建javabean
动态创建javabean对于我们进行开发,会有一定的帮助,一下是使用cglib动态创建javabean的一个例子: 先贴上code: package com.dalong.CreateCode; im ...
- 一种从JSON数据创建Java类的高效办法
<一种从JSON数据创建Java类的高效办法> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs JSON格式的数据经常会遇到,比如调用Web服 ...
- 创建java类并实例化类对象
创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...
- Eclipse 创建 Java 类
打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Cla ...
- Eclipse 创建 Java 类---Eclipse教程第10课
打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Cla ...
- 利用MAP动态创建C++类对象
MFC的CRuntimeClass利用链表实现了C++类的动态创建.但是如果项目中对动态创建的要求比较低,我们完全可以利用map实现简单的动态创建. http://blog.csdn.net/yeji ...
- silverlight依据json字符串动态创建实体类
1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json); ...
- 创建Java类并实例化深入理解
package com.sanguosha.java; import java.util.Scanner;//导入包 public class TestPerson { public static v ...
- 创建Java类并实例化的基本过程
package com.sanguosha.java; /* * 面向对象实现的过程 * 1.创建类并设计类的成员(成员变量即属性and成员方法即方法) * 2.通过类来创建类的对象,也称类的实例化 ...
随机推荐
- linux 编译安装apache
1.下载apache.安装apache #wget http://apache.etoak.com//httpd/httpd-2.4.4.tar.gz #tar zxvf httpd-2.4..4.t ...
- C++基础复习
1.Object-C也是面向对象的语言:2.#include<iostream> //#include是一个预处理指令3.using namespace std; //std是命名空间,u ...
- Ubuntu中使用终端运行Hadoop程序
接上一篇<Ubuntu Kylin系统下安装Hadoop2.6.0> 通过上一篇,Hadoop伪分布式基本配好了. 下一步是运行一个MapReduce程序,以WordCount为例: 1. ...
- xcode设置项目图标玻璃镜效果
xcode5中设置 ios6和ios7的适配一些小细节注意,ios6中图标会默认的设置玻璃镜效果 找到图片文件夹APPlcon中右侧设置中的有个iOS icon is pre-rend-rendere ...
- CF 295E Yaroslav and Points(Splay)
题目大意: 两个操作 1 id op 把id的位置+op 2 id op 查询在[id.op]之间的全部的数的差 思路: 关键是pushup函数. 自己退一下会发现.跟区间的总和,区间的节点个数有 ...
- Open-source Project官方地址
非常遗憾因为这篇博文是专门搜集各个开源项目的各种官方连接地址的,所以链接较多,csdn不同意保存. 请点击这里下载. 因为我的积分不多了,所以这个文档须要一个积分..应该不多吧...确实没有积分的童鞋 ...
- Android开发艺术探索》读书笔记 (5) 第5章 理解RemoteViews
第5章 理解RemoteViews 5.1 RemoteViews的应用 (1)RemoteViews表示的是一个view结构,它可以在其他进程中显示.由于它在其他进程中显示,为了能够更新它的界面,R ...
- Android WindowManager的使用
经常,我们看到在桌面上可移动的悬浮窗,这种场景还是很多的, 像流量统计,桌面歌词等,安全软件的清理小部件 这种小部件主要是通过 WindowManager ; WindowManager.Layout ...
- JavaScript--时间显示小插件
JS调用系统时间,显示在当前页面上,利用DOM操作节点来实现动态刷新 <!DOCTYPE html> <html> <head> <meta charset= ...
- java获取对象属性类型、属性名称、属性值 【转】
/** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String ...