Java 如何将JDK代理的代理实例传递到调用处理程序中?

Java 如何将JDK代理的代理实例传递到调用处理程序中?,java,reflection,Java,Reflection,我查过了 堆垛溢流柱。但我还是不明白 在JDK proxy中,proxy.newInstance(arg1、arg2、arg3)创建新的代理实例。当我们在此代理实例上调用一个方法时,它将调用其关联的调用处理程序。调用处理程序的invoke方法将调用委托给实际方法 invoke方法有3个参数。第一个被称为进行调用的代理实例。我的疑问是代理实例是如何传递给调用处理程序invoke方法的 为了更清楚地理解我的疑问,请参阅下面的代码 接口 package proxyclasses; public in

我查过了 堆垛溢流柱。但我还是不明白

在JDK proxy中,proxy.newInstance(arg1、arg2、arg3)创建新的代理实例。当我们在此代理实例上调用一个方法时,它将调用其关联的调用处理程序。调用处理程序的invoke方法将调用委托给实际方法

invoke方法有3个参数。第一个被称为进行调用的代理实例。我的疑问是代理实例是如何传递给调用处理程序invoke方法的

为了更清楚地理解我的疑问,请参阅下面的代码

接口

package proxyclasses;

public interface Animal {
    public abstract void eat(String food);
}
混凝土类

包代理类

public class Cow implements Animal {

    public void eat(String food) {
        System.out.println("Cow eats "+food);
    }

}
代理类

package proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHandler implements InvocationHandler {

    private Object target;

    public MyInvocationHandler(Object target) {
        this.target = target;
    }
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        System.out.println("Proxy "+proxy.getClass().getName());
        Object result = method.invoke(target, args);
        return result;
    }

}
主类

import java.lang.reflect.Proxy;

import proxy.MyInvocationHandler;
import proxyclasses.Animal;
import proxyclasses.Cow;


public class ProxyExample {
    public static void main(String args[]){
        Cow cow = new Cow();
        Animal proxInstance = (Animal)Proxy.newProxyInstance(Cow.class.getClassLoader(),Cow.class.getInterfaces(),new MyInvocationHandler(cow));
        proxInstance.eat("Grass");
    }
}
这里我的疑问是主类中的“proxInstance”是如何传递给myInvocationHandlers调用方法的

这里我的疑问是主类中的“proxInstance”是如何传递给myInvocationHandlers调用方法的

你似乎已经回答了你自己的问题

当我们在这个代理实例上调用一个方法时,它调用其关联的调用处理程序

所以你有点像

Method method = ...
Object[] args = ...
handler.invoke(this, method, args);

其中,
是封装处理程序的代理对象,即您调用的代理。

我假设既然理解代理,您就理解如何将引用传递给方法调用,所以我不理解您在问什么。代理实例的方法调用如何将自身传递给调用处理程序?