黑马程序员技术交流社区

标题: 关于动态代理的疑问。求助! [打印本页]

作者: 廖智    时间: 2012-12-8 22:40
标题: 关于动态代理的疑问。求助!
本帖最后由 廖智 于 2012-12-9 11:30 编辑

package cn.itcasst.p1;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
public class ProxyTest2 {
/**
  * @param args
  * @throws Exception
  * @throws NoSuchMethodException
  */
public static void main(String[] args) throws NoSuchMethodException, Exception {
  // TODO Auto-generated method stub

  Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);
  //创建动态代理的实例。
  Collection proxy3 = (Collection)Proxy.newProxyInstance(
    Collection.class.getClassLoader(),
    new Class[]{Collection.class},
    new InvocationHandler(){
     ArrayList target = new ArrayList();
     @Override
     public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {//这里明确的参数分别代表那些,请详细说明?
      
      return method.invoke(target,args); //这里的method代表的是那个method对象?
     }
     
    }
    );
  proxy3.add("zxx");
  proxy3.add("lhm");
  proxy3.add("bxd");
  System.out.println(proxy3);
  System.out.println(proxy3.size());
  
}
}


动态代理看的有点晕,请高手帮忙下,红字部分是问题,谢谢了。

作者: 刘菲    时间: 2012-12-8 23:13
1.public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {//这里明确的参数分别代表那些,请详细说明?
这里的第一个参数是表明是哪个代理对象,
第二个参数是表明调用代理对象的哪个方法,
第三个参数代表调用这个方法时要传递什么参数
2return method.invoke(target,args); //这里的method代表的是那个method对象?
这里的method表明调用目标对象的这个方法
3.以上是个人理解,希望可以帮到楼主
作者: 廖智    时间: 2012-12-8 23:43
刘菲 发表于 2012-12-8 23:13
1.public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {//这里明确的参数 ...

恩,谢谢!开始还感觉很模糊,听你说了,大概知道是什么意思了。




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