A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一个铃,一颗珠 中级黑马   /  2013-8-22 23:16  /  1029 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一个铃,一颗珠 于 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     }

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

4 个回复

倒序浏览
Object proxy是当前代理的对象,比如说要代理ArrayList,那么就需要产生一个代理对象,该代理对象里面实现的都是些Colection接口里面的方法,而这些方法里面执行的是Collection的实现类ArrayList里面的同名方法。还不明白的话,就把他看成是代理商吧。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
通告代理引用。。具体用处。。为了查看方便?
回复 使用道具 举报
proxy调用的方法只返回一个实例,该实例需要作为代理对象去关联目标类,准确的说是关联目标类所实现的那个接口,所以在Invocationhandler的实现类中的invoke方法内不需要调用,只需要将调用INVOKE方法的对象作为参数传递给生成实例的方法就行。
回复 使用道具 举报
  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方法知道是由哪个代理类来实现方法的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马