java反射机制(2)- 实践:反射机制+动态代理实现模拟RMI远程方法调用

转载请注明出处:反射机制+动态代理实现模拟RMI远程方法调用

1 涉及主要知识点

  1、RMI(Remote Method Invocation):远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外 一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI的基本框架如下图所示:

      这里写图片描述
  2、代理模式,可具体参考文章:JDK动态代理深入分析 本案例中的远程代理的基本模型如下:
这里写图片描述

2 项目详解

  项目需求:客户端LocalClient请求调用远程服务器端RemoteServer的业务类RemoteService的方法getService,并将方法结果返回。其中将客户端请求方法的信息封装成Call对象,再将方法的返回结果设置进call对象中,即B/S之间传递call对象,因此Call对象需要实现Serializable接口。底层Socket通信由Connector负责。由于涉及到远程代理,这里采用JDK动态代理模式。采用工厂模式,根据给定的服务器的host和port,以及类名,由工厂RemoteServiceProxyFactory获取代理类。代理模式中,代理类和目标类需要实现共同的接口Service,客户端针对Service接口编程。
  以上过程基本描述了所涉及到了类名,系统类结构图如下:

这里写图片描述
  (1)创建代理类和目标类需要实现共同的接口Service。

package com.markliu.remote.service;
/**
 * Service接口。代理类和被代理类抖需要实现该接口
 */
public interface Service {
   
    public String getService(String name, int number);
}

  (2)服务器端创建RemoteService类,实现了Service 接口。

package com.markliu.remote.serviceimpl;
import com.markliu.remote.service.Service;
/**
 * 服务器端目标业务类,被代理对象
 */
public class RemoteService implements Service {
   
    @Override
    public String getService(String name, int number) {
        return name + ":" + number;
    }
}

  (3)创建封装客户端请求和返回结果信息的Call类。
  为了便于按照面向对象的方式来处理客户端与服务器端的通信,可以把它们发送的信息用 Call 类来表示。一个 Call 对象表示客户端发起的一个远程调用,它包括调用的类名或接口名、方法名、方法参数类型、方法参数值和方法执行结果。

package com.markliu.local.bean;
import java.io.Serializable;
/**
 * 请求的javabean
 */
public class Call implements Serializable{
   
    private static final long serialVersionUID = 5386052199960133937L;
    private String className; // 调用的类名或接口名
    private String methodName; // 调用的方法名
    private Class<?>[] paramTypes; // 方法参数类型
    private Object[] params; // 调用方法时传入的参数值
    /**
     
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunny Mornings

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值