动态创建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());

}

}

}

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

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

  1. 使用cglib动态创建java类

    转至:http://ckwang17.iteye.com/blog/963881 cglib 是一个开源项目! 是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Jav ...

  2. Java中如何动态创建接口的实现

    有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务 ...

  3. cglib 动态代理基础篇

    cglib 动态代理基础篇 CGlib是什么? CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. 下面我们将通过一个具体的事例来看一下CGli ...

  4. CGLIB动态代理机制,各个方面都有写到

    CGLIB库介绍 代理提供了一个可扩展的机制来控制被代理对象的访问,其实说白了就是在对象访问的时候加了一层封装.JDK从1.3版本起就提供了一个动态代理,它使用起来非常简单,但是有个明显的缺点:需要目 ...

  5. CGLib动态代理原理及实现

    JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了.CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采 ...

  6. Spring中的cglib动态代理

    Spring中的cglib动态代理 cglib:Code Generation library, 基于ASM(java字节码操作码)的高性能代码生成包 被许多AOP框架使用 区别于JDK动态代理,cg ...

  7. 【Java EE 学习 51】【Spring学习第三天】【cglib动态代理】【AOP和动态代理】【切入点表达式】

    一.cglib动态代理 1.简介 (1)CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. (2) 用CGlib生成代理类是目标类的子类. (3 ...

  8. JDK动态代理与CGLib动态代理

    1.JDK动态代理 JDK1.3以后java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,动态代理是实现AOP的绝好底层技术. JDK的动态代理主要涉及到java.lang.reflect ...

  9. Java代理(jdk静态代理、动态代理和cglib动态代理)

    一.代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强.加入一些非业务性代码,比如事务.日志.报警发邮件等操作. 二.jdk静态代理 1.业务接口 /** * 业务接 ...

随机推荐

  1. IP分类

    IP: IP分为公有ip和私有ip. 私有ip分为以下5类: 类别 ip范围 子网掩码 A 1.0.0.0------127.255.255.255 255.0.0.0 B 128.0.0.0---1 ...

  2. 关于InputStream类的available()方法

    要一次读取多个字节时,经常用到InputStream.available()方法,这个方法可以在读写操作前先得知数据流里有多少个字节可以读取.需要注意的是,如果这个方法用在从本地文件读取数据时,一般不 ...

  3. Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'e ...

  4. iOS UI-QQ聊天布局

    一.Model BWMessage.h #import <Foundation/Foundation.h> typedef enum{ BWMessageMe = ,//表示自己 BWMe ...

  5. php中点击网页不跳转执行程序

    if($code['result_code'] !='FAIL') { echo "<script type='text/javascript'> alert('退款成功,请耐心 ...

  6. Asterisk——part 1

    Asterisk Russell Bryant Asterisk1 is an open source telephony applications platform distributed unde ...

  7. 在python中是没有NULL的,取而代之的是None,它的含义是为空

    在python中是没有NULL的,取而代之的是None,它的含义是为空

  8. 我的一起开源网 www.17ky.net上线了

    .net开源生态的落后,使得.net开发人员所拥有的开源资源比其他语言的开发者少了很多,这也使得笔者很早之前就喜欢收集各种开源项目,经常会去逛codeplex,开源中国社区等网站,同时也喜欢在自己或公 ...

  9. vue项目启动

    这篇文章主要用于有源码vue项目安装: 1.安装node.js环境(npm包管理器)前面博客有写到如何安装: 2.vue-cli 脚手架构建工具前面博客有写到如何安装: 3.cnpm  npm的淘宝镜 ...

  10. 去除 DBGridEh SelectedRows里无效的书签

    数据集处于过滤状态,然后选中几个记录,再修改了这些记录中的某个字段(和过滤条件有关),导致那几个记录不符合过滤条件,不显示了.但是SelectedRows里 还保存着.如果不删除SelectedRow ...