java cglib动态给对象添加属性并赋值
时间: 2024-02-19 14:31:37 浏览: 97
在使用cglib动态给对象添加属性之前,需要先了解一下Java的反射机制。
Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;并且能够调用这个类的任意方法,获取任意属性。
cglib是一个强大的代码生成库,它是基于ASM框架实现的,可以在运行时动态生成新的类。cglib通过继承目标对象实现代理,并在子类中添加新的属性和方法。
下面是一个例子,演示了如何使用cglib动态给对象添加属性并赋值:
```java
import net.sf.cglib.beans.BeanGenerator;
public class DynamicAddPropertyDemo {
public static void main(String[] args) {
// 创建一个BeanGenerator对象
BeanGenerator generator = new BeanGenerator();
// 设置要创建的对象的属性
generator.addProperty("name", String.class);
generator.addProperty("age", Integer.class);
// 创建一个对象
Object obj = generator.create();
// 给对象赋值
ReflectUtil.setProperty(obj, "name", "张三");
ReflectUtil.setProperty(obj, "age", 20);
// 输出对象的属性
System.out.println("name:" + ReflectUtil.getProperty(obj, "name"));
System.out.println("age:" + ReflectUtil.getProperty(obj, "age"));
}
}
class ReflectUtil {
/**
* 获取对象的属性值
*/
public static Object getProperty(Object obj, String propertyName) {
try {
BeanMap map = BeanMap.create(obj);
return map.get(propertyName);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 设置对象的属性值
*/
public static void setProperty(Object obj, String propertyName, Object value) {
try {
BeanMap map = BeanMap.create(obj);
map.put(propertyName, value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
运行结果:
```
name:张三
age:20
```
上面的例子中,首先创建了一个BeanGenerator对象,然后使用addProperty()方法添加了两个属性:name和age。
接着使用create()方法创建了一个对象,并调用ReflectUtil类中的setProperty()方法给对象的属性赋值。最后,使用ReflectUtil类中的getProperty()方法获取对象的属性值并输出。
阅读全文