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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© stormdzh 中级黑马   /  2013-10-6 23:30  /  2338 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

5 个回复

倒序浏览
对于代理的问题根本不用太害怕我怎么会得出这样的结果代码多好乱呀:你只要了解最基本的代理就知道该怎么做了:
例如:你上面写得我给你指点一下你就明白
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通过上面的解释你应该明白了吧

评分

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

查看全部评分

回复 使用道具 举报 1 0
血剑无痕 发表于 2013-10-6 23:50
对于代理的问题根本不用太害怕我怎么会得出这样的结果代码多好乱呀:你只要了解最基本的代理就知道该怎么做 ...

很感谢高手指点,学习了!{:soso_e102:}
回复 使用道具 举报
学习学习!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马