java - 尝试更改 CGLib 代理字段值的异常

标签 java proxy cglib

我创建了一个类的 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/

相关文章:

proxy - 为静态 IP 使用代理服务

apache - 使用 Apache 和 Socket.io 代理 WebSocket 连接

sql-server - 如何通过代理服务器连接到SQL Server

java - spring Cglib 很有用,但 @Transactional 类不代理

spring - CGLIB,Spring和构造函数注入(inject)

java - gpg : signing failed: secret key not available

java - 如何以不同的形式访问jtextPane?

java - GWT 与外部独立应用程序交互

java - 将 HashMap 转换为数组

java - 服务 bean 在 spring cglib 代理中注入(inject)失败