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
  • 相关阅读:
    JVM调优-Java中的对象
    Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装
    Navicat for MySQL 64位破解版
    Idea详细配置
    数据库--悲观锁【收藏,待尝试】
    性能问题分析
    java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法
    Mysql show indexes 查看索引状态
    基于(Redis | Memcache)实现分布式互斥锁
    彻底解决每次打开visio都提示windows正在配置visio的问题
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276538.html
Copyright © 2011-2022 走看看