使用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.业务接口 /** * 业务接 ...
随机推荐
- 1月21日 Reference Data Type 数据类型,算法基础说明,二分搜索算法。(课程内容)
Reference Datat Types 引用参考数据类型 -> 组合数据类型 Array, Hash和程序员自定义的复合资料类型 组合数据的修改: 组合数据类型的变量,不是直接存值,而是存一 ...
- nyoj-310-河南省第四届省赛题目-二分+dinic
SECRET 时间限制:3000 ms | 内存限制:65535 KB 难度:6 描述 Dr.Kong is constructing a new machine and wishes to ...
- hdu-2897-巴什博弈
邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- postgresql数据库常用命令
--获取数据库软件版本select version();--获取数据库启动时间select pg_postmaster_start_time();--获取配置文件最近load时间select pg_c ...
- PHP header函数设置http报文头示例详解
//定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/at ...
- linux make virtual memory more efficient three components
Page Cache This is used to speed up access to images and data on disk. As pages are read into memory ...
- HDU 4791 Alice's Print Service 思路,dp 难度:2
A - Alice's Print Service Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- net负载均衡服务器架构网址
https://blog.csdn.net/orichisonic/article/details/71122291 https://blog.csdn.net/huangxiangec/articl ...
- Python中简化的验证码功能实现
#!/usr/bin/env python # _*_ encoding:utf-8 _*_ # author:snate import random def generate_auth_code() ...
- tomcat配置多个项目通过IP加端口号访问
一个tomcat部署多个项目并通过不同的端口访问 第一步:修改 $TOMCAT_HOME\conf\server.xml文件. 复制Service节点,去掉<Connector port=&qu ...