首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代理实例如何将自身传递给InvocationHandler?

代理实例如何将自身传递给InvocationHandler?
EN

Stack Overflow用户
提问于 2012-12-05 05:08:25
回答 1查看 4.6K关注 0票数 0

下面是来自代理类的方法签名:

代码语言:javascript
复制
Object java.lang.reflect.Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException

我检查了Proxy类中newProxyInstance的源代码,但找不到proxy对象将自身传递给InvocationHandler方法的位置

代码语言:javascript
复制
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;

有人知道吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 05:25:44

您可以通过通常的方式提供参考资料。一种常见的模式是创建一个引用目标的最终变量,并将InvocationTargetHandler的匿名实现传递给Proxy.newProxyInstance方法,如下所示:

代码语言:javascript
复制
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);
        }
});

这个示例是世界上最无意义的代理,因为它不需要做任何事情就可以修补所有的方法调用,但是您可以用各种有趣的东西填充InvocationTargetHandler

有时,API感觉有点古怪,因为被代理的对象不是协定的一部分,但是JDK的作者希望为代理类提供存在的可能性,而不需要支持具体的实现。他们这样做是非常有用的,单元测试中的way...mock对象就是一个很好的例子。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13711944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档