书上内容:
6.5.2 创建代理对象 要想创建一个代理对象,需要使用 Proxy类的 newProxylnstance方法。这个方法有三个
参数:
•一个类加栽器(class loader)。作为 Java 安全模型的一部分,对于系统类和从因特网 上下载下来的类,可以使用不同的类加载器。有关类加载器的详细内容将在卷 章中讨论。目前,用 null 表示使用默认的类加载器。 •一个 Class对象数组,每个元素都是需要实现的接口。
n 第 9
•一个调用处理器。 还有两个需要解决的问题。如何定义一个处理器? 能够用结果代理对象做些什么? 当
然,这两个问题的答案取决于打算使用代理机制解决什么问题。使用代理可能出于很多原 因,例如:
•路由对远程服务器的方法调用。 •在程序运行期间,将用户接口事件与动作关联起来。 •为调试,跟踪方法调用。 在示例程序中,使用代理和调用处理器跟踪方法调用,并且定义了一个 TraceHander 包 装器类存储包装的对象。其中_的 invoke方法打印出被调用方法的名字和参数,随_后用包装好的对象作为隐式参数调用这个方法。
class TraceHandler implements InvocationHandler
{
private Object target ;
public TraceHandler(Object t)
{
target = t;
}
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable
{
// print method name and parameters
// invoke actual method
return m.invoke(target , args) ;
}
}
问题:我不理解为什么invoke()可以打印出被调用的方法的名字和参数;
因为我看在这本书的解释里,invoke()只是起到类似C语言中函数指针的功能;这段代码里我找不到关于打印输出的内容,可能是我因为不知道调用处理器的工作方式,望大神能解释一下;