当前位置:Gxlcms > mysql > 深入解析MapReduce架构设计与实现原理–读书笔记(7)hadoopRPC反

深入解析MapReduce架构设计与实现原理–读书笔记(7)hadoopRPC反

时间:2021-07-01 10:21:17 帮助过:31人阅读

hadoop RPC 中用到的JDK开发工具包中的一些类。 主要包括java.lang. reflect 反射机制和动态代理相关类。java.net网络编程库,java.nio(NIO) 1.java反射机制和动态代理 反射机制是java语言的一个重要特性,它允许用户动态获取类的信息和动态调用对象的方法

hadoop RPC中用到的JDK开发工具包中的一些类。
主要包括java.lang.reflect反射机制和动态代理相关类。java.net网络编程库,java.nio(NIO)
1.java反射机制和动态代理
反射机制是java语言的一个重要特性,它允许用户动态获取类的信息和动态调用对象的方法。
Class类 代表一个java类
Field类 代表Java类的属性
Method类 代表Java类的方法
Constructor类 代表java类的构造函数
Array类 提供了动态创建数组,以及访问数组元素的静态方法
Proxy类和InvocationHandler接口 提供了动态生成代理类以及实例的方法。

代理是一种常用的设计模式,其目的是为其他对象提供一种代理以控制对这个对象的访问。代理类负责为委托类进行预处理,或者执行完后的后续处理。

java.lang.reflect.Proxy

这是java动态代理机制的主类,它提供了一组静态方法,用于为一组接口动态地生成代理类及对象。

  1. static InvocationHandler getInvocationHandler(Object proxy) //获取指定代理对象所关联的调用处理器
  2. static Class getProxyClass(ClassLoader loader,Class[] interfaces) //获取关联于指定的类装载器和一组接口的动态代理类的对象
  3. static boolean isProxyClass(Class cl) //判断指定的类对象是否一个动态代理类
  4. static Object newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h) //为指定类装载器,一组接口及调用处理器生成动态代理类实例

java.lang.reflect.InvocationHandler

这是调用处理器接口。它定义了一个invoke方法,用于处理在动态代理类对象上的方法调用。开发人员需要实现该接口,并在invoke方法中实现对委托类的代理访问。

  1. //下方法负责处理动态代理类上的所有方法调用。三个参数:代理类实例,被调用的方法,调用参数。
  2. Object invoke(Object proxy,Method method,Objects[] args)
  3. 示例如下:
  4. package com.sw.testproxy;
  5. import java.lang.reflect.InvocationHandler;
  6. import java.lang.reflect.Proxy;
  7. import java.lang.reflect.Method;
  8. interface CalculatorProtocol {
  9. public int add (int a,int b);
  10. public int subtract(int a,int b);
  11. }
  12. class Server implements CalculatorProtocol{
  13. @Override
  14. public int add(int a, int b) {
  15. return a+b;
  16. }
  17. @Override
  18. public int subtract(int a, int b) {
  19. return a-b;
  20. }
  21. }
  22. class CalculatorHandler implements InvocationHandler{
  23. private Object objOriginal ;
  24. public CalculatorHandler(Object obj){
  25. this.objOriginal = obj ;
  26. }
  27. @Override
  28. public Object invoke(Object proxy, Method method, Object[] args)
  29. throws Throwable {
  30. Object result = method.invoke(this.objOriginal,args);
  31. return result;
  32. }
  33. }
  34. public class DynamicProxyExample {
  35. public static void main(String[] args) {
  36. CalculatorProtocol server = new Server();
  37. InvocationHandler handler = new CalculatorHandler(server);
  38. CalculatorProtocol client = (CalculatorProtocol)Proxy.newProxyInstance(server.getClass().getClassLoader(),
  39. server.getClass().getInterfaces(),handler);
  40. int r = client.add(5,3);
  41. System.out.println(r);
  42. }
  43. }

人气教程排行