黑马程序员技术交流社区
标题:
动态代理问题
[打印本页]
作者:
黑马-小龙
时间:
2013-1-29 00:22
标题:
动态代理问题
public class Fanshe1 {
public static void main(String[] args) throws InstantiationException,
IllegalAccessException {
ArrayList taget = new ArrayList();
Collection proxy4 = (Collection) getProxy(taget, new Advice());
proxy4.add("cxl");
proxy4.add("zzz");
System.out.println(proxy4.size());
// 结果打印三对方法,是因为,集合每使用一次proxy4对象的时候都从进入InvocationHandler对象一次
}
public static Object getProxy(final ArrayList taget, final Advice advice)
throws InstantiationException, IllegalAccessException {
// 先获取该类的字节码文件,再获取该类的类加载器
// 然后获取接口的字节码文件
// 最后调用处理的程序,通过InvocationHandler
Object className = Proxy.newProxyInstance(taget.getClass()
.getClassLoader(), taget.getClass().getInterfaces(),
new InvocationHandler() {
@Override
// 传入代理对象、对象的方法、对象的参数
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
// 放入代理对象方法的上面和下面
advice.look();
// invoke.使用taget的对象的args方法
Object result = method.invoke(taget, args);
advice.show();
return result;
}
});
return className;
}
}
复制代码
有点不明白,张老师说的,invoke方法,客户端的调用代理,使用方法的时候,每使用一次都会调用invoke方法是什么意思?
作者:
黄锦成
时间:
2013-1-29 10:11
这个有点绕。就是客户端调用代理对象proxy的方法,方法名为 add,那么在add方法中其实调用了InvocationHandler的invoke方法,在invoke方法内部,调用了target目标类的add方法
proxy.PNG
(22.04 KB, 下载次数: 25)
下载附件
2013-1-29 10:10 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2