黑马程序员技术交流社区

标题: 动态代理问题 [打印本页]

作者: 一个铃,一颗珠    时间: 2013-8-22 23:16
标题: 动态代理问题
本帖最后由 一个铃,一颗珠 于 2013-8-22 23:18 编辑

动态代理中implements InvocationHandler接口有invoke方法,这个方法中Object proxy变量在这个方法没有调用,这个Object proxy变量是起什么作用的?
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
29         Object result = null;
30         //调用之前31         doBefore();
32         //调用原始对象的方法33         result=method.invoke(obj, args);
34         //调用之后35         doAfter();
36         return result;
37     }


作者: xuluheng718    时间: 2013-8-23 00:16
Object proxy是当前代理的对象,比如说要代理ArrayList,那么就需要产生一个代理对象,该代理对象里面实现的都是些Colection接口里面的方法,而这些方法里面执行的是Collection的实现类ArrayList里面的同名方法。还不明白的话,就把他看成是代理商吧。
作者: code_geass    时间: 2013-8-27 12:13
通告代理引用。。具体用处。。为了查看方便?
作者: 肥猫    时间: 2013-8-27 12:59
proxy调用的方法只返回一个实例,该实例需要作为代理对象去关联目标类,准确的说是关联目标类所实现的那个接口,所以在Invocationhandler的实现类中的invoke方法内不需要调用,只需要将调用INVOKE方法的对象作为参数传递给生成实例的方法就行。
作者: binghaiwang    时间: 2013-8-27 13:19
  1. ArrayList target = new ArrayList();

  2.                                         @Override
  3.                                         public Object invoke(Object proxy, Method method,
  4.                                                         Object[] args) throws Throwable {
  5.                                                 // TODO Auto-generated method stub
  6.                                                 long beginTime = System.currentTimeMillis();
  7.                                                 Object retVal = method.invoke(target, args);
  8.                                                 long endTime = System.currentTimeMillis();
  9.                                                 System.out.println(method.getName() + "运行时间:"
复制代码
例如我上边的部分代码。假如我要调用  ArrayList 中的add方法  代理类中调用表现为proxy.add("abc"),
Object proxy这个参数只是代表了代理类来关联ArrayList 中的add方法,说白了就是起到一个关联作用,让invoke方法知道是由哪个代理类来实现方法的。





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