黑马程序员技术交流社区

标题: InvocationHandler的invoke方法如何被调用? [打印本页]

作者: 高庆亮    时间: 2011-11-18 10:52
版主也是要去黑马第五期达?
作者: 喻尚健    时间: 2011-11-18 11:17
newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

invoke(Object proxy, Method method, Object[] args)
在代理实例上处理方法调用并返回结果。在与方法关联的代理实例上调用方法时,将在调用处理程序上调用此方法。
作者: 赵磊5    时间: 2011-11-18 13:42
Proxy(库类)中的newProxyInstance方法被调用,该方法返回一个被代理对象的实例,然后向上转型为其对应的接口。
invoke方法的调用过程,就是先新建其类对象(实例),然后把它传入newProxyInstance方法中,在里面解析并用它来调用invoke方法。
作者: laoyang    时间: 2011-11-18 14:19
其实动态代理就是动态地帮你写了一个代理类,并实现了被代理接口。这个代理类$proxy0的父类把InvocationHandler实现聚合进来(h属性), 这样客户端可以强转成被代理接口(因为代理类也实现了这个接口),调用的时候动态代理类就调用父类的h.invoke()(h也就是你的InvocationHandler实现),h里面再调用target的这个方法,也就是真正的方法调用。从而达到动态调用的作用。
作者: 高庆亮    时间: 2011-11-18 16:23
黑马谢承强 发表于 2011-11-18 15:56
恩恩,,嘿嘿,多多关照

哈哈 ,嗯,互相关照。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2