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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冬天的热带鱼 中级黑马   /  2013-12-24 16:27  /  931 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面代码中的ArrayList 类型的target怎么理解为是目标呢?这点儿不理解。
Collection proxy3 = (Collection)Proxy.newProxyInstance(
                                Collection.class.getClassLoader(),
                                new Class[]{Collection.class},
                                new InvocationHandler(){
                                        ArrayList target = new ArrayList();
                                        public Object invoke(Object proxy,Method method,Object[] args)
                                                throws Throwable{
                                                long beginTime = System.currentTimeMillis();
                                                Object value = method.invoke(target, args);
                                                long endTime = System.currentTimeMillis();
                                                System.out.println(method.getName()+" running time of "+(endTime - beginTime));
                                                return value;
                                                }
                                }
                                );
                proxy3.add("zhangsan");
                proxy3.add("lisi");
                proxy3.add("wangwu");
                System.out.println(proxy3.size());

评分

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

查看全部评分

1 个回复

倒序浏览
这个是给collection代理,只能他的子类才能做目标类,也可以将目标抽取出来,不过代码就要改变了
这下面的代码是张老师讲的时候,我根据他讲的理解着写的
  1. public class ProxyDemo
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.             Collection set=new HashSet();
  6.             Collection set2=(Collection)show(set,new myAdvice());
  7.             set2.add("one");
  8.             set2.add("klds");
  9.             System.out.println(set2.size());
  10.     }
  11.    
  12.     public static Object show(final Object target ,final Advice advice)
  13.     {
  14.             Object obj=Proxy.newProxyInstance(
  15.                             target.getClass().getClassLoader(),
  16.                             target.getClass().getInterfaces(),
  17.                             new InvocationHandler()
  18.                             {
  19.                                         public Object invoke(Object proxy, Method method,
  20.                                                         Object[] args) throws Throwable {
  21.                                                 advice.beforMethod();
  22.                                                 Object reVal=method.invoke(target, args);
  23.                                                 advice.afterMethod();
  24.                                                 return reVal;
  25.                                         }
  26.                                    
  27.                             }
  28.                             );
  29.             return obj;
  30.     }
  31.    
  32. }[code]public class myAdvice implements Advice {

  33.         public void beforMethod() {
  34.        System.out.println("方法前");
  35.         }

  36.         public void afterMethod() {

  37.                 System.out.println("方法后");
  38.         }

  39. }[code]
  40. public interface Advice
  41. {
  42.     void beforMethod();
  43.     void afterMethod();
  44. }
复制代码
[/code][/code]

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马