黑马程序员技术交流社区

标题: 代理 [打印本页]

作者: stormdzh    时间: 2013-10-6 23:30
标题: 代理
  1. import java.lang.reflect.InvocationHandler;
  2. import java.lang.reflect.Method;
  3. import java.lang.reflect.Proxy;
  4. import java.util.ArrayList;
  5. import java.util.Collection;

  6. public class agent1 {

  7. public static void main(String[] args) {
  8. Collection proxy3= (Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(),
  9. new Class[]{Collection.class},
  10. new InvocationHandler() {
  11. ArrayList target=new ArrayList();
  12. public Object invoke(Object proxy, Method method, Object[] args)
  13. throws Throwable {
  14. System.out.println("外部的invoke下面----1");
  15. long begintime=System.currentTimeMillis();
  16. System.out.println("传来的args【0】的值:"+args[0]);
  17. if(args[0]=="zxx")
  18. args[0]="duzhenhua";
  19. Object retVal= method.invoke(target, args );
  20. System.out.println("里面的invoke下面----2");
  21. System.out.println("invake中的args【0】的值:"+args[0]);
  22. System.out.println("目前ArrayList里面的值是:"+target);
  23. long endtime=System.currentTimeMillis();
  24. System.out.println(method.getName()+"running time of"+(endtime-begintime));
  25. return retVal;
  26. }
  27. }
  28. );///创建代理对象
  29. System.out.println("第一个add上面");
  30. proxy3.add("zxx");
  31. System.out.println("第二个add上面");
  32. proxy3.add("lhm");
  33. System.out.println("第三个add上面");
  34. proxy3.add("bxd");



  35. }

  36. }
复制代码
好迷茫,它是怎么走的?原理是怎样,用这个代码给我解释解释。
为了搞明白它是怎么走的,写了这个多的注释,运行的结果是:

结果代理.png (47.14 KB, 下载次数: 39)

结果代理.png

作者: 血剑无痕    时间: 2013-10-6 23:50
对于代理的问题根本不用太害怕我怎么会得出这样的结果代码多好乱呀:你只要了解最基本的代理就知道该怎么做了:
例如:你上面写得我给你指点一下你就明白
public static void main(String[] args) {
Collection proxy3= (Collection)Proxy.newProxyInstance(
//获得类加载器
Collection.class.getClassLoader(),
//获得要代理类的接口
new Class[]{Collection.class},
//执行句柄
new InvocationHandler() {
//invoke 进行的是拦截方法
public Object invoke(Object proxy, Method method, Object[] args)
{}
t通过上面的解释你应该明白了吧


作者: stormdzh    时间: 2013-10-7 21:02
血剑无痕 发表于 2013-10-6 23:50
对于代理的问题根本不用太害怕我怎么会得出这样的结果代码多好乱呀:你只要了解最基本的代理就知道该怎么做 ...

很感谢高手指点,学习了!{:soso_e102:}

作者: chensc    时间: 2013-10-10 12:27
学习学习!
作者: chensc    时间: 2013-10-11 09:18
学习学习!
作者: chensc    时间: 2013-10-12 08:45
学习学习!




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