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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我手心里的宝 高级黑马   /  2013-4-11 09:37  /  1108 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 我手心里的宝 于 2013-4-11 12:28 编辑
  1. package com.qdzks.demo3.proxy;

  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Proxy;
  5. import java.util.ArrayList;
  6. import java.util.Collection;

  7. public class ProxyClass {

  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. // TODO Auto-generated method stub
  13. final ArrayList target=new ArrayList();
  14. Collection collection=(Collection)getProxy(target,new MyAdvice());
  15. collection.add("aaa");
  16. collection.add("bbb");
  17. collection.add("ccc");
  18. collection.add("ddd");
  19. System.out.println(collection.size());
  20. System.out.println(collection);
  21. }

  22. private static Object getProxy(final Object target,final Advice advice ) {
  23. Object collection=Proxy.newProxyInstance(target.getClass().getClassLoader(),
  24. target.getClass().getInterfaces(),
  25. new InvocationHandler(){

  26. @Override
  27. public Object invoke(Object proxy, Method method,
  28. Object[] args) throws Throwable {
  29. // TODO Auto-generated method stub
  30. advice.beforMethod();
  31. Object retVal=method.invoke(target, args);
  32. advice.endMethod(method);
  33. return retVal;
  34. }
  35. }

  36. );
  37. return collection;
  38. }

  39. }
复制代码
两个问题:这样写我会写
1.动态类的具体作用到底是什么,面向接口编程这个
我理解,但是我感觉这样在方法中添加,也没有比以前简单多少呀,只要在类中添加不就可以了吗
2.为什么调用目标类的方法,然后让InvocationHandler调用Invoke方法,Collection就能添加,删除呢,求解

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

4 个回复

倒序浏览
希望哥们把代码写的有层次一点,看的是真心痛苦
回复 使用道具 举报
首先,动态代理类的作用不是为了简化 ,而是为了增强灵活性,不知道下边这个比喻恰不恰当:

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
贾振凯 发表于 2013-4-11 11:18
首先,动态代理类的作用不是为了简化 ,而是为了增强灵活性,不知道下边这个比喻恰不恰当:
...

稍微明白一点了,谢谢哈
回复 使用道具 举报
我听张老师视频里边说,为了加一些自己用的功能,比如这个可以监控运行时间什么的,
就是比如在调试阶段给自己看,等到后来交给客户,直接把代理去了就行了,不用修改代码了,
我理解的话,功能不变,但是加了一些自己用的功能,临时可以用,比如后来添加的功能不用了,就省的老修改代码了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马