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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值