Hadoop源码分析4: 动态代理

1.数据记录FileStatus 

public class FileStatus {
      private String filename;
      private long time;
    
      public FileStatus(String filename) {
            this.filename=filename;
            this.time=(new Date()).getTime();
      } 
 
      public String toString() {
            return "File: "+filename+" Create at "+(newDate(time)); 
      }
}

2.服务接口和实现

public interface QueryStatus {
      FileStatus getFileStatus(String filename);
}

public class QueryStatusImpl implementsQueryStatus {
      @Override
      public FileStatus getFileStatus(String filename){
            FileStatus status=newFileStatus(filename);
            return status;
      }
}

3.代理的InvocationHandler

public class MyInvocationHandler implementsInvocationHandler {
      private QueryStatus queryStatus;

      public MyInvocationHandler(QueryStatusqueryStatus) {
            this.queryStatus = queryStatus;
      }

      @Override
      public Object invoke(Object proxy, Methodmethod, Object[] args) throws Throwable{ 
            System.out.println("----事务开始--");
            System.out.println("正式做事");
            Object ret =method.invoke(queryStatus, args);
            System.out.println("做事完成");
            System.out.println("----事务结束--");
            return ret;
      }
}
 

4.使用代理  

public static void main(String[] args) { 
         Class[] interfaces = newClass[] { QueryStatus.class };
         ClassLoaderclassLoader = QueryStatus.class.getClassLoader();
        MyInvocationHandler handler =new MyInvocationHandler(new QueryStatusImpl());
         QueryStatusqueryProxy = (QueryStatus)Proxy.newProxyInstance(classLoader, interfaces,handler); 
         FileStatusstatus = queryProxy.getFileStatus("/tmp/testDP");
        System.out.println("结果:"+status);
}

打印结果:

----事务开始--
正式做事
做事完成
----事务结束--
结果:File: /tmp/testDP Create at Fri Feb 28 12:02:47 CST2014
原文地址:https://www.cnblogs.com/leeeee/p/7276538.html