动态创建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. iosFQ教程

    https://www.youtube.com/watch?v=B8Vu3Xrivsc + https://sobaigu.com/how-to-use-shadowrocket-ios.html

  2. httpclient妙用一 httpclient作为客户端调用soap webservice(转)

    前面有一篇使用HttpClient调用带参数的post接口方法,这里找到一篇使用HttpClient调用Soap协议接口的方式. 原文地址:httpclient妙用一 httpclient作为客户端调 ...

  3. mysql判断表记录是否存在,不存在则插入新纪录

    开始以为和SQL Server一样,使用not exists进行判断,结果不行: ) INSERT INTO vrv_paw_template(templateName,templateFileNam ...

  4. Shell脚本的学习(一)

    Shell脚本的学习(一) 一)代码式shell脚本简介 1.下载 Xshell 5 建一个文件夹 mkdri home/data ; 1)查看一个在data里建一个1.sh 查看是否建立成功. 2) ...

  5. java深浅拷贝

    转载:http://atjava.iteye.com/blog/1722501 首先我们看看浅拷贝和深拷贝的定义 浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制 深拷贝:对象, ...

  6. redis中的"HashMap"

    redis是一个存储键值对的内存数据库,其存储键值的方式和java中的HashMap相似. 表征redis数据库的结构体是redisDb (在server.h文件中),redis服务器默认有16个数据 ...

  7. SQL Server 调优系列基础篇 - 性能调优介绍

    前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...

  8. css rem计算

    先抛出一个问题:为什么要选择rem? px:像素是相对于显示器屏幕分辨率而言的相对长度单位.pc端使用px倒也无所谓,可是在移动端,因为手机分辨率种类颇多,不可能一个个去适配,这时px就显得非常无力, ...

  9. Android2.1消息应用(Messaging)

    我想首先应该从AndroidManifest.xml文件开始,该文件是Android应用(APK)的打包清单,其中提供了关于这个应用程序的基本信息,如名称(application/@label),图标 ...

  10. Linux中MySQL中文乱码问题

    一. 问题描述 登录后查看mysql默认编码: mysql> show variables like 'character%'; +--------------------------+---- ...