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
  • 相关阅读:
    JqueryQrcode生成二维码不支持中文的解决办法
    [转载]浅析海量用户的分布式系统设计
    [转载]大型网站应用中 MySQL 的架构演变史
    CSS3变形记(上):千变万化的Div
    JavaScript进阶之路——认识和使用Promise,重构你的Js代码
    Visual Studio Code预览版Ver 0.3.0试用体验
    Apache Spark 2.3.0 正式发布
    Apache Spark 2.2.0 新特性详细介绍
    Apache Spark 2.2.0 正式发布
    Spark 论文篇-论文中英语单词集
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276538.html
Copyright © 2011-2022 走看看