【有书共读】《Spring源码深度解读》第12章远程服务

第12章 远程服务

RMI全部的宗旨就是尽可能地简化远程接口对象的使用。Java RMI极大的依赖于接口。在需要创建一个远程对象时,通过传递接口隐藏实现细节。客户端得到的远程对象正好与本地的根代码连接,右后者负责透过网络通信,程序员只需要关心如何通过自己的接口句柄发送消息。

12.1服务端实现

服务端定义了两个bean,一个是对接口实现类的发布,另一个是对RMI服务的发布。在RMIServiceExporter中实现了几个比较敏感的接口。BeanClassLoaderAwareDisposableBeanInitializingBeanDisposableBean接口保证在实现该接口的bean销毁时调用destory方法,BeanClassLoaderAware接口保证在实现该接口的bean初始化时调用setBeanClassLoader方法。InitializingBean接口则是保证在实现该接口的bean初始化时调用afterPropertiesSet方法,这个是功能的初始化入口。这个过程中一共经历了:

(1)验证service

(2)处理用户自定义的SocketFactory属性

(3)根据配置参数获取Registry

(4)构造对外发布实例

(5)发布实例

12.2HttpInvoker

HttpInvoker是一个新的远程调用模型,作为spring框架的一部分,来执行基于Http的远程调用,并使java序列化机制。

服务端实现:服务器的实现类HttpInvokerServiceExporter类实现了InitialzingBean接口以及HttpRequestHandler接口。在分析RMI服务时我们已经了解到,当某个Bean继承自InitialzingBean接口的时候,spring会确保这个bean在初始化时调用afterPropertiesSet方法,而对于HttpRequestHandler接口,因为我们在配置中已经将此接口配置成web服务,那么当有相应请求的时候,springweb服务就会将程序引导至httpRequestHandlerhandleRequest方法中。

客户端实现:在服务端调用HttpServletRequest提取客户端传来的RemoteInvocation实例,然后进行相应解析。所以,在客户端,一个比较重要的任务就是构建RemoteInvocation实例,并传送到服务端。在客户端类HttpInvokerProxyBean实现了InitialzingBean接口。同时,又实现了FactoryBean以及MethodInterceptor。在HttpInvokerProxyFactoryBean类的invoke方法中,主要有三个步骤:(1)构建RemoteInvocation实例

(2)远程执行方法

(3)提取结果

这三个步骤中最为关键的是元辰该方法的执行。执行远程调用的首要步骤就是将调用方法的实例写入输出流中。

客户端实现的逻辑

(1)创建httpPost

(2)设置RequestBody

(3)执行远程方法

(4)远程相应验证

(5)提取响应信息

(6)提取返回结果

全部评论

相关推荐

真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务