我创建了一个类的 CGLib 动态代理,但是当我尝试访问原始类中声明的任何字段时,我得到 java.lang.NoSuchFieldException。我需要获取该字段才能更改其值。
顺便说一句,这是代理所基于的类:
public class Person {
private String name;
....
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
...
}
这是引发上述异常的代码片段(在“MethodInterceptor”的“拦截”方法内)(更具体地说是第一行):
public Object intercept(Object instance, Method jdkMethod, Object[] args, MethodProxy method) throws Throwable {
...
Field field = instance.getClass().getField("name");
field.setAccessible(true);
field.set(instance, "foo");
....
您知道访问所需字段或更改其值的任何其他方法吗?
谢谢。
最佳答案
显然,CGLib 代理是原始类的子类。因此,以下代码运行良好:
Field field = instance.getClass().getSuperclass().getDeclaredField("name");
关于java - 尝试更改 CGLib 代理字段值的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24215123/