黑马程序员技术交流社区
标题:
关于代理疑问,求大神赐教
[打印本页]
作者:
哈达洋
时间:
2014-9-17 18:56
标题:
关于代理疑问,求大神赐教
*******************************************部分程序**************************** final ArrayList target = new ArrayList();
Collection myProxy1 =(Collection) getProxy(target,new myAdvice());
myProxy1.add("zhansan");
myProxy1.add("lisi");
myProxy1.add("wangwu");
System.out.println("==========");
System.out.println(myProxy1);
}
private static Object getProxy(final Object target,final Advice myAdvice) {
Object myProxy1 = (Object)Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
myAdvice.beforMethod();
//System.out.println("=====");
Object oo = method.invoke(target, args);
System.out.println(target+"..."+oo);
myAdvice.aferMethod();
//System.out.println("-------");
return oo;
}
});
return myProxy1;
}
************************************************运行结果*******************
hello,world
[zhansan]...true
bye,world
hello,world
[zhansan, lisi]...true
bye,world
hello,world
[zhansan, lisi, wangwu]...true
bye,world
==========
hello,world
[zhansan, lisi, wangwu]...[zhansan, lisi, wangwu]
bye,world
[zhansan, lisi, wangwu]
******************************疑问????***********************
System.out.println(myProxy1); 程序在执行这句话的时候,为什么还会调用InvocationHandler中的inovke方法???而不是直接打印存储在动态代理类里的最终结果??
作者:
zuochbd
时间:
2014-9-17 18:56
System.out.println(myProxy1);执行的是System.out.println(myProxy1.toString());
执行动态代理类对象的toString()的话, 其是会调用invoke的.
执行动态代理类对象的Object类的hashCode, equals, toString时, 都会调用到invoke的.
而执行其它的Object中的方法, 是不会调用到invoke的.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2