黑马程序员技术交流社区

标题: 动态代理问题 [打印本页]

作者: 冬天的热带鱼    时间: 2013-12-24 16:27
标题: 动态代理问题
下面代码中的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());

作者: 末末    时间: 2013-12-24 16:35
这个是给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]




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