JDK动态代理代理——Hessian实现原理

本文介绍了代理的概念及其在RPC中的应用,特别是通过Hessian客户端实现远程调用的过程。涉及JDK动态代理机制,包括代理对象如何接收客户端方法并将其传递给服务器端,以及服务器端如何通过反射调用目标对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理理解:就是在目标对象之上添加额外处理,使功能增强或减少。代理对象本省不一定要有目标对象本身。目标对象不一定就一定包含在代理对象中(组合模式),他可以通过网络或者。

RPC实现中的几个实例产品,例如Hessian,可以看做是代理的重要代表。其客户端的主要实现原理就是利用了JDK提供的动态代理机制。其客户端代理对象,主要用于接收当前client的方法。然后将方法名称、参数、以及interface_name 传递给服务器,服务器利用反射调用目标对象,将返回结果写回到输出流中。然后客户端将服务器端的返回结果,进行解析。主要使用到的几个重要的类。

Proxy\InvocationHandler\.

 

JDK动态代理理解:

动态代理对象是虚拟机构造出来的。并且代理对象是一个或者多个接口的实现,不会继承任何类,也就是说只能将代理对象转换成上述接口的对象实例。如果没有接口是不可以的。这是JDK动态代理的弊端。代理对象将所有的目标接口的处理方法都交给了InvocationHandler。也就是说,InvocationHandler对象才是决定是否调用或怎么调用目标对象的决策者。

例如,Hessian中的默认实现中,就是将InvocationHandler的invoke方法的method、args通过HttpConnection传递给服务器,进行调用,服务器(默认)通过反射调用目标对象,然后再通过这个HttpConnection将结果返回给Client Side.注意:由于走的是HTTP连接,所以可以携带请求头,在服务器端进行校验,进行安全验证;调用一次方法就会创建一个连接,必定会伴随连个过程(发送数据流/接收数据流)。这是通过网络调用目标对象。当然也可以直接在InvocationHandler的构造函数里面传入目标对象,直接在invoke方法里面调用目标对象的方法,当然需要method.invoke(target,args)之前或者之后,进行AOP处理。但是这里目标对象。

针对Hessian的几点重要说明:

1、如果Hessian返回的是一个复杂对象的话,那么该对象需要实现serializiable接口。否则不能被序列化。因为是通过网络传输二进制流

2、返回的值可以为string\int\double\integer\list\map\POJO\对象

Tulips

转载于:https://my.oschina.net/hotbain/blog/119348

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值