zoukankan      html  css  js  c++  java
  • java中的代理

    package cn.itcast.day3;

    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.ArrayList;
    import java.util.Collection;

    public class ProxyTest {

     /**
      * @param args
      */
     public static void main(String[] args) throws Exception {
      // TODO Auto-generated method stub
      Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
      System.out.println(clazzProxy1.getName());

      System.out.println("----------begin constructors list----------");
      /*
       * $Proxy0() $Proxy0(InvocationHandler,int)
       */
      Constructor[] constructors = clazzProxy1.getConstructors();
      for (Constructor constructor : constructors) {
       String name = constructor.getName();
       StringBuilder sBuilder = new StringBuilder(name);
       sBuilder.append('(');
       Class[] clazzParams = constructor.getParameterTypes();
       for (Class clazzParam : clazzParams) {
        sBuilder.append(clazzParam.getName()).append(',');
       }
       if (clazzParams != null && clazzParams.length != 0)
        sBuilder.deleteCharAt(sBuilder.length() - 1);
       sBuilder.append(')');
       System.out.println(sBuilder.toString());
      }

      System.out.println("----------begin methods list----------");
      /*
       * $Proxy0() $Proxy0(InvocationHandler,int)
       */
      Method[] methods = clazzProxy1.getMethods();
      for (Method method : methods) {
       String name = method.getName();
       StringBuilder sBuilder = new StringBuilder(name);
       sBuilder.append('(');
       Class[] clazzParams = method.getParameterTypes();
       for (Class clazzParam : clazzParams) {
        sBuilder.append(clazzParam.getName()).append(',');
       }
       if (clazzParams != null && clazzParams.length != 0)
        sBuilder.deleteCharAt(sBuilder.length() - 1);
       sBuilder.append(')');
       System.out.println(sBuilder.toString());
      }

      System.out.println("----------begin create instance object----------");
      // Object obj = clazzProxy1.newInstance();
      Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class);
      class MyInvocationHander1 implements InvocationHandler {

       public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        return null;
       }

      }
      Collection proxy1 = (Collection) constructor.newInstance(new MyInvocationHander1());

      System.out.println(proxy1);
      proxy1.clear();
      // proxy1.size();
      // System.out.println("111111111111111");

      Collection proxy2 = (Collection) constructor.newInstance(new InvocationHandler() {

       public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return null;
       }

      });

      final ArrayList target = new ArrayList();
      Collection proxy3 = (Collection) getProxy(target, new MyAdvice());
      proxy3.add("zxx");
      proxy3.add("lhm");
      proxy3.add("bxd");
      System.out.println(proxy3.size());
      System.out.println(proxy3.getClass().getName());
     }

     private static Object getProxy(final Object target, final Advice advice) {
      Object proxy3 = Proxy.newProxyInstance(target.getClass().getClassLoader(),
      /* new Class[]{Collection.class}, */
      target.getClass().getInterfaces(), new InvocationHandler() {

       public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        /*
         * long beginTime = System.currentTimeMillis(); Object retVal =
         * method.invoke(target, args); long endTime =
         * System.currentTimeMillis();
         * System.out.println(method.getName() + " running time of " +
         * (endTime - beginTime)); return retVal;
         */

        advice.beforeMethod(method);
        Object retVal = method.invoke(target, args);
        advice.afterMethod(method);
        return retVal;

       }
      });
      return proxy3;
     }

    }

    ----------------------------------------------------------------------------

    package cn.itcast.day3;

    import java.lang.reflect.Method;

    public interface Advice {
     void beforeMethod(Method method);
     void afterMethod(Method method);
    }
    ----------------------------------------------------------

    package cn.itcast.day3;

    import java.lang.reflect.Method;


    public class MyAdvice implements Advice {
     long beginTime = 0;

     public void afterMethod(Method method) {
      // TODO Auto-generated method stub
      System.out.println("调用方法后做的事!");  
      long endTime = System.currentTimeMillis();
      System.out.println(method.getName() + " running time of " + (endTime - beginTime));

     }

     public void beforeMethod(Method method) {
      // TODO Auto-generated method stub
      System.out.println("调用方法前做的事!");
      beginTime = System.currentTimeMillis();
     }

    }

  • 相关阅读:
    我的项目物业收费
    我的项目人员定位
    我的简历
    我的项目证券分析
    MSIL探索-序
    VC++深入详解笔记.cpp
    减少图片分辨率
    PL/SQL Developer 7.1 正式版 完美破解
    Lamp软件环境安装
    CentOS 6.4 安装
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3237071.html
Copyright © 2011-2022 走看看