简单样例—动态生成bean
样例说明:建立一个动态实体bean,使用cglib动态加入属性,和相应的get,set方法。
需要导入cglib-nodep-2.2.jar
been类
Java代码 收藏代码
<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>
再写一个测试类
Java代码 收藏代码
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());
}
}
转自:http://ckwang17.iteye.com/blog/963881
分享到:
相关推荐
3. **动态数据访问**:例如ORM框架如Hibernate,使用CGLib动态创建数据访问对象(DAO)。 总的来说,CGLib是Java开发中一个不可或缺的工具,尤其在需要动态生成和修改类的场景下,它的高效和灵活使其成为首选。了解...
CGLib动态代理是一种在Java编程中实现动态代理的技术,它主要通过字节码操作库ASM来生成目标类的子类,从而实现对目标类的方法拦截和增强。在Java中,当我们需要在运行时动态地创建对象并扩展其功能时,CGLib是一个...
CGlib动态代理是Java开发中一个非常重要的工具库,它主要用来实现代理模式,尤其在面向切面编程(AOP)中发挥着关键作用。CGlib是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。CGlib并不...
CGlib的核心类是`Enhancer`,它是CGlib动态代理的入口。我们可以通过`Enhancer`创建一个增强器实例,然后设置回调函数(Callback),最后通过`enhancer.create()`方法生成代理对象。回调函数通常是`...
springAOP等框架中,大量用到代理技术; 两类代理技术: 1,java动态代理,见JDK文档或相关java书;...2.cglib创建代理类,比第一种更加简单,代理类和背代理类不需要实现共同接口。本例子就是cglib代理的例子,很简单
CGlib(Code Generation Library)是Java编程语言中的一个代码生成库,主要用于运行时动态创建对象和扩展类。在Java世界中,动态代理是一种强大的技术,它允许我们在运行时创建对象并实现特定接口或覆盖特定方法。...
在实际开发中,如Spring AOP框架就同时支持JDK和CGLIB动态代理,根据目标类是否实现接口自动选择合适的代理方式。 总结来说,JDK动态代理和CGLIB动态代理都是为了在运行时提供对目标对象的增强,它们通过不同的实现...
使用CGlib动态代理的一般步骤如下: 1. 引入相关依赖:在项目中引入上述jar包。 2. 创建Enhancer对象:`Enhancer enhancer = new Enhancer();` 3. 设置被代理的目标类:`enhancer.setSuperclass(MyTargetClass.class...
它是一个强大的工具,广泛用于创建Java代理、AOP(面向切面编程)框架以及代码生成场景。CGLib依赖于ASM库来实现其底层功能,ASM是一个Java字节码操控和分析框架。 在CGLib动态代理机制中,主要有两个核心包: 1. ...
它是对Bytecode Generation Library(字节码生成库)的一个封装,能够在运行时动态创建新类和对象,广泛应用于AOP(面向切面编程)框架如Spring中。 **CGlib动态代理原理** CGlib动态代理基于ASM库来操作Java字节码...
这个库在很多场合被广泛使用,特别是在那些需要在运行时动态创建对象或增强已有对象功能的场景下,比如Spring AOP(面向切面编程)就是其中的一个典型应用。下面我们将深入探讨CGlib动态代理的相关知识点。 ### ...
当一个类没有实现接口时,Spring将使用CGLib动态生成该类的子类,并在子类中插入切面代码。这样,每次调用原始类的方法时,都会先执行切面代码,然后再执行原方法,从而实现了切面编程。 总的来说,CGLib和ASM库的...
然而,CGlib也有其局限性,比如对于final类和方法,由于Java的限制,CGlib无法创建子类,因此不能对其进行扩展。此外,对于大型项目,由于其底层的字节码操作,调试可能会变得更加复杂。 在实际应用中,CGlib通常与...
使用CgLib动态代理的步骤大致如下: 1. 创建Enhancer对象:这是CgLib的核心类,用于配置代理对象的创建过程。 2. 设置回调函数:通常使用MethodInterceptor接口,定义intercept()方法,这是代理方法执行前后的回调...
在Java编程领域,代理模式...了解并掌握JDK和CGLIB动态代理的原理及使用,对于深入理解Spring框架和提升Java开发能力至关重要。通过实践案例,你可以进一步探索这两个代理机制的实现细节,从而更好地应用在实际项目中。
总结,CGLib动态代理在基于Maven的项目中有着广泛的应用,它提供了对未实现接口的类进行扩展的能力。通过理解其工作原理和使用方式,开发者可以更灵活地实现诸如日志记录、性能监控、事务管理等增强功能。结合实际...
java设计模式【之】Cglib动态代理【源码】【场景:帮爸爸买菜】 /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用...
CGLIB使用ASM库在运行时动态生成字节码,创建目标类的子类,从而实现对目标类方法的增强。 1. **Enhancer类** - `Enhancer`是CGLIB的主要入口,它扮演了工厂的角色,通过它可以配置代理对象的行为,并生成代理子类...
Java动态代理和CGLIB动态代理是两种在Java开发中常用的面向切面编程(AOP)技术,主要用于在运行时创建具有额外功能的对象。这两者都允许我们在不修改原有代码的情况下,为对象添加额外的行为,如日志记录、事务管理...
CGLib全称为Code Generation Library,是一个Java字节码操纵库,主要用于为类创建子类,从而实现动态代理。当目标类无法被继承(如final类)或者不希望修改源代码时,CGLib是一个很好的选择。它通过动态生成字节码...