使用cglib动态创建javabean
动态创建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的更多相关文章
- 使用cglib动态创建java类
转至:http://ckwang17.iteye.com/blog/963881 cglib 是一个开源项目! 是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Jav ...
- Java中如何动态创建接口的实现
有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务 ...
- cglib 动态代理基础篇
cglib 动态代理基础篇 CGlib是什么? CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. 下面我们将通过一个具体的事例来看一下CGli ...
- CGLIB动态代理机制,各个方面都有写到
CGLIB库介绍 代理提供了一个可扩展的机制来控制被代理对象的访问,其实说白了就是在对象访问的时候加了一层封装.JDK从1.3版本起就提供了一个动态代理,它使用起来非常简单,但是有个明显的缺点:需要目 ...
- CGLib动态代理原理及实现
JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了.CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采 ...
- Spring中的cglib动态代理
Spring中的cglib动态代理 cglib:Code Generation library, 基于ASM(java字节码操作码)的高性能代码生成包 被许多AOP框架使用 区别于JDK动态代理,cg ...
- 【Java EE 学习 51】【Spring学习第三天】【cglib动态代理】【AOP和动态代理】【切入点表达式】
一.cglib动态代理 1.简介 (1)CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. (2) 用CGlib生成代理类是目标类的子类. (3 ...
- JDK动态代理与CGLib动态代理
1.JDK动态代理 JDK1.3以后java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,动态代理是实现AOP的绝好底层技术. JDK的动态代理主要涉及到java.lang.reflect ...
- Java代理(jdk静态代理、动态代理和cglib动态代理)
一.代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强.加入一些非业务性代码,比如事务.日志.报警发邮件等操作. 二.jdk静态代理 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 ...
- 关于InputStream类的available()方法
要一次读取多个字节时,经常用到InputStream.available()方法,这个方法可以在读写操作前先得知数据流里有多少个字节可以读取.需要注意的是,如果这个方法用在从本地文件读取数据时,一般不 ...
- Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'e ...
- iOS UI-QQ聊天布局
一.Model BWMessage.h #import <Foundation/Foundation.h> typedef enum{ BWMessageMe = ,//表示自己 BWMe ...
- php中点击网页不跳转执行程序
if($code['result_code'] !='FAIL') { echo "<script type='text/javascript'> alert('退款成功,请耐心 ...
- Asterisk——part 1
Asterisk Russell Bryant Asterisk1 is an open source telephony applications platform distributed unde ...
- 在python中是没有NULL的,取而代之的是None,它的含义是为空
在python中是没有NULL的,取而代之的是None,它的含义是为空
- 我的一起开源网 www.17ky.net上线了
.net开源生态的落后,使得.net开发人员所拥有的开源资源比其他语言的开发者少了很多,这也使得笔者很早之前就喜欢收集各种开源项目,经常会去逛codeplex,开源中国社区等网站,同时也喜欢在自己或公 ...
- vue项目启动
这篇文章主要用于有源码vue项目安装: 1.安装node.js环境(npm包管理器)前面博客有写到如何安装: 2.vue-cli 脚手架构建工具前面博客有写到如何安装: 3.cnpm npm的淘宝镜 ...
- 去除 DBGridEh SelectedRows里无效的书签
数据集处于过滤状态,然后选中几个记录,再修改了这些记录中的某个字段(和过滤条件有关),导致那几个记录不符合过滤条件,不显示了.但是SelectedRows里 还保存着.如果不删除SelectedRow ...