问一个关于Java动态代理的问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 16:17:09
最近初学java动态代理,这里模仿书上写了另一个最简单的例子
public class Handler implements InvocationHandler {

private Object target;

public Handler(Object obj) {
target = obj;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before");
Object result = method.invoke(target, args);
System.out.println("after");
return result;
}

}
那这个involke方法这些方法的参数是怎么传进去的呢,我发现第一个参数proxy用不到啊,这是为什么,我看api描述中说它代表要代理的对象,课时如果我把target改成proxy绝对会有问题,proxy没办法具体实例化,那么这里proxy这个参数还有什么作用呢?

这三个参数都是代理类传进去的
分别代表要代理的对象,方法,方法的参数
你如果看着"proxy"不爽把方法签名改成
public Object invoke(Object target, Method method, Object[] args)
也可以啊

这个 proxy 是你在程序中使用的代理对象
你将目标对象传给InvocationHandler
然后Proxy.newProxyInstance(classloader,interfaces,InvocationHandler)
生成代理对象就是你在invoke中传入的proxy

可以参看 Proxy 源码