• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 29次浏览 已收录 0个评论

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动态代理机制的主类,它提供了一组静态方法,用于为一组接口动态地生成代理类及对象。

<p class="devcodeoverflow"><ol><i style="color:transparent">本文来源gaodai$ma#com搞$代*码*网(</i><li>static InvocationHandler getInvocationHandler(Object proxy)  //获取指定代理对象所关联的调用处理器</li><li>static Class getProxyClass(ClassLoader loader,Class[] interfaces) //获取关联于指定的类装载器和一组接口的动态代理类的对象</li><li>static boolean isProxyClass(Class cl)  //判断指定的类对象是否一个动态代理类</li><li>static Object newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h) //为指定类装载器,一组接口及调用处理器生成动态代理类实例</li></ol></p>

java.lang.reflect.InvocationHandler

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

<p class="devcodeoverflow"><ol><li>//下方法负责处理动态代理类上的所有方法调用。三个参数:代理类实例,被调用的方法,调用参数。</li><li>Object invoke(Object proxy,Method method,Objects[] args)</li><li>示例如下:</li><li>package com.sw.testproxy;</li><li>import java.lang.reflect.InvocationHandler;</li><li>import java.lang.reflect.Proxy;</li><li>import java.lang.reflect.Method;</li><li>interface CalculatorProtocol {</li><li>	public int add (int a,int b);</li><li>	public int subtract(int a,int b);</li><li>}</li><li>class Server implements CalculatorProtocol{</li><li>	@Override</li><li>	public int add(int a, int b) {</li><li>		return a+b;</li><li>	}</li><li>	@Override</li><li>	public int subtract(int a, int b) {</li><li>		return a-b;</li><li>	}</li><li>}</li><li>class CalculatorHandler implements InvocationHandler{	</li><li>	private Object objOriginal ;</li><li>	public CalculatorHandler(Object obj){</li><li>		this.objOriginal = obj ;</li><li>	}	</li><li>	@Override</li><li>	public Object invoke(Object proxy, Method method, Object[] args)</li><li>			throws Throwable {</li><li>		Object result = method.invoke(this.objOriginal,args);</li><li>		return result;</li><li>	}</li><li>}</li><li>public class DynamicProxyExample {</li><li>	public static void main(String[] args) {</li><li>		CalculatorProtocol server  = new Server();</li><li>		InvocationHandler handler = new CalculatorHandler(server);</li><li>		CalculatorProtocol client = (CalculatorProtocol)Proxy.newProxyInstance(server.getClass().getClassLoader(),</li><li>																			 server.getClass().getInterfaces(),handler);</li><li>		int r = client.add(5,3);</li><li>		System.out.println(r);</li><li>	}</li><li>}</li></ol></p>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:深入解析MapReduce架构设计与实现原理–读书笔记(7)hadoopRPC反
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址