下面是来自代理类的方法签名:
Object java.lang.reflect.Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException我检查了Proxy类中newProxyInstance的源代码,但找不到proxy对象将自身传递给InvocationHandler方法的位置
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;有人知道吗?
谢谢
发布于 2012-12-05 05:25:44
您可以通过通常的方式提供参考资料。一种常见的模式是创建一个引用目标的最终变量,并将InvocationTargetHandler的匿名实现传递给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);
}
});这个示例是世界上最无意义的代理,因为它不需要做任何事情就可以修补所有的方法调用,但是您可以用各种有趣的东西填充InvocationTargetHandler。
有时,API感觉有点古怪,因为被代理的对象不是协定的一部分,但是JDK的作者希望为代理类提供存在的可能性,而不需要支持具体的实现。他们这样做是非常有用的,单元测试中的way...mock对象就是一个很好的例子。
https://stackoverflow.com/questions/13711944
复制相似问题