클래스의 CGLib 동적 프록시를 만들었지 만 원래 클래스에서 선언 된 필드에 액세스하려고하면 java.lang.NoSuchFieldException을 얻습니다. 나는 그 가치를 바꾸기 위해서 현장을 얻을 필요가있다. 그런데 CGLib 프록시 필드 값을 변경하려고 시도하는 예외
, 이것은 프록시에 기초 클래스이다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");
....
필요한 필드에 액세스하거나 값을 변경하는 다른 방법을 알고 있습니까?
감사합니다.
힌트 감사합니다. 내가 제안한대로 "getDeclaredField"를 변경했으며 CGLib와 관련된 다양한 필드를 얻었습니다. 그러나 반환 된 필드 중 "name"필드가 없으므로 문제가 여전히 지속됩니다. –