zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Windows进程通信(2)使用内存映射文件
    VC2010添加头文件目录
    CString(ANSI/Unicode)与string/wstring的安全转换
    1005 ( Number Sequence )
    1004 ( Let the Balloon Rise )
    1003 ( Max Sum )
    CreateMutex
    CloseHandle
    delphi的Frame简单演示
    DLL中显示模式窗体
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276538.html
Copyright © 2011-2022 走看看