黑马程序员技术交流社区

标题: InvocationHandler类中invoke()方法参数的分析和应用 [打印本页]

作者: 施大勇    时间: 2013-9-13 12:29
标题: InvocationHandler类中invoke()方法参数的分析和应用
本帖最后由 施大勇 于 2013-9-28 15:37 编辑
  1. public static Object getProxy(final Object obj, final Advice adv) {//参数为动态代理的类对象及额外的内容。
  2.   Object proxy = Proxy.newProxyInstance(obj.getClass().getClassLoader(),
  3.     obj.getClass().getInterfaces(),
  4.     new InvocationHandler() {
  5.      @Override
  6.      public Object invoke(Object proxy, Method method,
  7.        Object[] args) throws Throwable {
  8.       //invoke()方法三个参数的意义,proxy - 在其上调用方法的代理实例,
  9.      //它指的是被代理的类的实例吗?如果是就与方法中传入的final Object obj指的是同一对象。????????????
  10.       // System.out.println("+++++++++++++++++++++++++++++++++++");
  11.       adv.before(method);
  12.       Object ob = method.invoke(obj, args);
  13.       // System.out.println("-----------------------------------");
  14.       adv.after(method);
  15.       return ob;
  16.      }
  17.     });
  18.   return proxy;
  19. }
复制代码

作者: 第一印象    时间: 2013-9-13 16:56
invoke方法中:
public Object invoke(Object proxy, Method method,Object[] args)
proxy:代表代理类的实例
method:代表代理实例上调用的接口方法的实例
args:调用的方法需要传的参数

Object ob = method.invoke(obj, args);
这句代码,obj代表的是目标类的实例,obj跟proxy是不一样的
作者: 施大勇    时间: 2013-9-14 15:36
第一印象 发表于 2013-9-13 16:56
invoke方法中:
public Object invoke(Object proxy, Method method,Object[] args)
proxy:代表代理类的实 ...

PROXY是代理类的实例,OBJ是被代理类的实例.可以这样认为吗?
A类是一个真实存在的类,有一个动态代理类B,那么PROXY是B的实例,而OBJ是A的实例,是这样吧.

作者: 第一印象    时间: 2013-9-14 21:33
施大勇 发表于 2013-9-14 15:36
PROXY是代理类的实例,OBJ是被代理类的实例.可以这样认为吗?
A类是一个真实存在的类,有一个动态代理类B,那 ...

是的,我也是这么理解的





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