如何在Spring框架中使用RMI技术

        在博客《RMI远程方法调用技术》中使用纯Java代码演示了RMI技术的使用,本篇博客将介绍如何在Spring框架中使用RMI技术。

        正如博客《RMI远程方法调用技术》提到的那样——RMI技术的应用通常包括在两个独立的应用程序中:RMI服务端应用程序和RMI客户端应用程序。本博客也从这两方面入手:
        RMI服务端应用程序

        1、自定义远程接口

        代码如下:

package com.ghj.packageofrmi;

/**
 * 定义远程接口。
 * 
 * @author 高焕杰
 */
public interface IHelloWordService{

	/**
     * 获取信息
     * 
     * @author 高焕杰
     */
    String getMsg();
}

        该自定义远程接口声明每个要远程调用的抽象方法。
        该接口特点:
        a、该接口没有继承java.rmi.Remote接口;
        b、该接口中的每个抽象方法没有抛出RemoteException异常或RemoteException 的父类异常;
        一句话,该接口和普通Java接口没什么区别,这与博客《RMI远程方法调用技术》中的自定义远程接口有质的区别。

        2、自定义远程接口实现类

        代码如下:

package com.ghj.packageofrmi;

/**
 * 远程接口实现类。
 * 
 * @author 高焕杰
 */
public class HelloWordService implements IHelloWordService{

    /**
     * 获取信息
     * 
     * @author 高焕杰
     */
    public String getMsg(){
        return "Hello World!"; 
    }
}

        该实现类特点:
        a、该实现类必须实现自定义远程接口内的每个远程抽象方法;
        b、该实现类没有继承java.rmi.UnicastRemoteObject类,这与博客《RMI远程方法调用技术》中的自定义远程接口实现类不同的地方;
        c、该实现类中默认的构造方法没有显示地写出来,该默认构造方法更没有声明抛出RemoteException异常,这与博客《RMI远程方法调用技术》中的自定义远程接口实现类不同的地方;
        d、该实现类也可以含有其它非远程接口定义的抽象方法或非接口方法(即实现类内部自定义的方法,这些方法不能使用@Override进行注释),但客户端不能调用这些新增的方法(别忘了,这些方法并不是自定义远程接口内的抽象方法)。
        一句话,该实现类是普通Java实现类没有区别。

        3、在xml文件中配置RMI服务端

        代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 
 	<!-- RMI服务端 -->
    <!-- RMI服务端远程接口实现类 --> 
	<bean id="helloWordService" class="com.ghj.packageofrmi.HelloWordService" scope="prototype"/>
  	<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
		<!-- 将远程接口实现类对象设置到RMI服务中 -->
		<property name="service" ref="helloWordService" />
		<!-- 设置RMI服务名,为RMI客户端依据此服务名获取远程接口实现类对象引用奠定基础 -->
		<property name="serviceName" value="helloWord" />
		<!-- 将远程接口设置为RMI服务接口 -->
		<property name="serviceInterface" value="com.ghj.packageofrmi.IHelloWordService" />
		<!-- 为RMI服务端远程对象注册表设置端口号-->
		<property name="registryPort" value="9090" />
		<!-- 其他属性可以查看org.springframework.remoting.rmi.RmiServiceExporter的类及其子类获取到-->
	</bean>
    
</beans> 

        该xml文件的配置就相当于博客《RMI远程方法调用技术》中服务端RMI启动类内被try-catch包裹的那段Java代码。

        4、启动RMI服务端

        代码如下:

package com.ghj.packageoftest;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 启动RMI服务端
 * 
 * @author 高焕杰
 */
public class StartRMIServer {

	public static void main(String[] args) {
        new ClassPathXmlApplicationContext("conf/spring/applicationContext.xml");
        System.out.println("RMI服务端启动!!!");
    }
}

        将RMI服务端配置到Spring框架内后,启动它是很简单的——只需Java加载配置文件上下文,在Spring容器生成相应的bean即可。

        RMI客户端应用程序

        1、自定义包含了RMI服务端自定义远程接口内某些抽象方法的RMI客户端接口

        代码如下:

package com.ghj.packageofrmi;

/**
 * 自定义包含了RMI服务端自定义远程接口内某些抽象方法的RMI客户端接口
 * 
 * @author 高焕杰
 */
public interface IHelloWord{

    /**
     * 获取信息
     * 
     * @author 高焕杰
     */
    String getMsg();
}

       该接口特点:
       a、该接口的接口名无需和RMI服务端自定义远程接口名称相同;
       b、该接口无须继承java.rmi.Remote接口;
       c、该接口中需要通过RMI服务端远程对象调用的接口抽象方法需要和RMI服务端一样(这里的“一样”是指接口名、方法名和参数列表一样,注意:这里没有提及方法返回值类型,实验证明,返回值类型可以相同也可以是RMI服务端自定义远程接口相应抽象方法返回值类型的父类,例如该接口中的返回值类型完全可以改为Object,这一点与博客《RMI远程方法调用技术》中的要求不一样——它要求返回值类型必须一致);
       d、该接口中的抽象方法无须抛出RemoteException异常;
       e、该接口可以包含RMI服务端自定义远程接口内不存在的抽象方法;
       f、该接口无须包含RMI服务端自定义远程接口的所有抽象方法;
       g、该接口完全可以直接复制RMI服务端自定义远程接口,但从代码精简的角度讲还是只保留需要的抽象接口为好。

        2、在xml文件中配置RMI服务端

        代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <!--RMI客户端-->
    <bean id="rmiProxyFactory" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> 
        <property name="serviceUrl" value="rmi://localhost:9090/helloWord"/>
        <property name="serviceInterface" value="com.ghj.packageofrmi.IHelloWord"/>
        <!-- 当连接失败时是否刷新远程调用stub -->
        <property name="refreshStubOnConnectFailure" value="true"/>
    </bean>
</beans>

        该xml文件的配置就相当于博客《RMI远程方法调用技术》中客户端RMI调用远程方法测试类内被try-catch包裹的那段Java代码。

        3、启动RMI客户端

        代码如下:

package com.ghj.packageoftest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ghj.packageofrmi.IHelloWord;

/**
 * 启动RMI客户端
 * 
 * @author 高焕杰
 */
public class RMIClient {

	public static void main(String[] args){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/spring/applicationContext.xml");
		IHelloWord helloWord = (IHelloWord) ctx.getBean("rmiProxyFactory");
		System.out.println(helloWord.getMsg());
	}
}

        从该Java类中可以看出来远程对象地址是通过RMI代理工厂的实例获取的。

        【0分下载示例源码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring框架是一个开源的JavaEE应用程序框架,它通过提供一个一致性的编程模型和丰富的功能集,帮助开发人员轻松地创建高效、可维护、可扩展的企业级应用程序。Spring框架的核心是控制反转(IoC)和面向切面编程(AOP)。 IoC是指将对象的创建和依赖关系的管理从应用程序代码抽象出来,交由Spring框架来处理。通过IoC容器,开发人员可以将对象的创建和依赖关系的管理集在一起,从而提高代码的可重用性和可维护性。Spring框架提供了多种IoC容器实现,包括BeanFactory、ApplicationContext等。 AOP是指将与系统功能无关的横切关注点,如日志记录、性能统计、事务管理等,从业务逻辑分离出来,以便更好地实现关注点的重用和代码的模块化。Spring框架提供了AOP框架,支持基于代理和字节码增强两种AOP实现方式。 除此之外,Spring框架还提供了一系列与企业级应用程序开发相关的功能,如远程调用(RMI、Hessian、Burlap等)、数据访问(JDBC、ORM等)、Web开发(MVC、REST、WebSocket、SockJS等)、安全性、缓存等。Spring框架的优点包括: - 提高代码的模块化和可重用性 - 简化了JavaEE开发的复杂度 - 支持多种IoC容器实现 - 提供了丰富的AOP功能 - 提供了一系列与企业级应用程序开发相关的功能 总的来说,Spring框架是一个功能强大、易于使用、高度可定制的JavaEE框架,被广泛应用于企业级应用程序的开发

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序猿老高

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

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

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

打赏作者

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

抵扣说明:

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

余额充值