gpt4 book ai didi

java - 代理实例如何将自身传递给 IncationHandler?

转载 作者:行者123 更新时间:2023-12-01 07:11:20 26 4
gpt4 key购买 nike

这是 Proxy 类的方法签名:

Object java.lang.reflect.Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException

我检查了Proxy类中newProxyInstance的源代码,我找不到代理对象在哪里将自身传递给InvocableHandler方法

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;

有人知道吗?

谢谢

最佳答案

您有责任通过通常的方式提供引用。一种常见的模式是创建一个最终变量来引用目标,并将 InitationTargetHandler 的匿名实现传递给 Proxy.newProxyInstance 方法,如下所示:

final Object myObject = /*initialize the proxy target*/;
final Object proxy = Proxy.newProxyInstance(
classLoader,
new Class[] { /*your interface(s)*/ },
new InvocationTargetHandler() {
public Object invoke(Object proxy, Method method, Object[] args) {
return method.invoke(myObject, args);
}
});

这个示例是世界上最毫无意义的代理,因为它不执行任何操作就修补了所有方法调用,但您可以用各种有趣的东西填充 InitationTargetHandler

有时,API 感觉有点笨拙,因为代理对象不构成契约的一部分,但 JDK 作者希望提供代理类在没有支持具体实现的情况下存在的可能性。他们这样做非常有用...单元测试中的模拟对象就是一个很好的例子。

关于java - 代理实例如何将自身传递给 IncationHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13711944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com