proxy - 为什么jdk动态代理实现中没有使用参数 'proxy'?

标签 proxy java

我在这里阅读了有关代理的示例: http://docs.oracle.com/javase/1.3/docs/guide/reflection/proxy.html

可以看到,'invoke'方法中的参数'proxy'没有被使用。代理是用来做什么的?为什么不在此处使用它: result = m.invoke(proxy, args); ?

public class DebugProxy implements java.lang.reflect.InvocationHandler {

private Object obj;

public static Object newInstance(Object obj) {
return java.lang.reflect.Proxy.newProxyInstance(
    obj.getClass().getClassLoader(),
    obj.getClass().getInterfaces(),
    new DebugProxy(obj));
}

private DebugProxy(Object obj) {
this.obj = obj;
}

public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable
{
    Object result;
try {
    System.out.println("before method " + m.getName());
    result = m.invoke(obj, args);
    } catch (InvocationTargetException e) {
    throw e.getTargetException();
    } catch (Exception e) {
    throw new RuntimeException("unexpected invocation exception: " +
                   e.getMessage());
} finally {
    System.out.println("after method " + m.getName());
}
return result;
}

}

最佳答案

proxy是JVM专门构建的“动态代理”类。您的代码无法直接调用它的方法。另一种思考方式是,代理是“接口(interface)”,调用其上的任何方法都对应于调用public Object invoke(Object proxy, Method m, Object[] args) 方法,因此调用代理上的方法将会以无限循环结束。

关于proxy - 为什么jdk动态代理实现中没有使用参数 'proxy'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516038/

相关文章:

java - Java 类型推断是如何工作的?

apache - 如何使用 Apache 反向代理动态 url

java - map 应用程序在打开时崩溃

c# - 如何使用 Windows 登录凭据使用 C# 进行代理身份验证

nginx - 使用 proxy_pass 配置 Nginx 的两个位置

java - 有什么区别。在 default.properties 和 project.properties 之间?

java - 我想重置/重新加载 JFrame,以便所有字段都设置回默认值

java - 检查一个 geohash 是否与另一个 geohash 相交

nginx - 如何将 nginx brotli_static 与 proxy_pass 一起使用?

google-chrome - 有没有可靠的开源可以代理UDP流量,比如QUIC?