Spring与RMI集成

Spring RMI允许您通过RMI基础架构公开您的服务。

Spring通过org.springframework.remoting.rmi.RmiProxyFactoryBean和org.springframework.remoting.rmi.RmiServiceExporter类提供了一种简单的方式来运行RMI应用程序。

RmiServiceExporter

它为RMI对象提供导出服务。该服务可以通过普通的RMI或RmiProxyFactoryBean访问。


RmiProxyFactoryBean

它是Rmi代理的工厂bean。它公开了可以用作bean引用的代理服务。


Spring与RMI集成示例

让我们看一下将Spring应用程序与RMI集成的简单步骤:

  1. Calculation.java
  2. CalculationImpl.java
  3. applicationContext.xml
  4. client-beans.xml
  5. Host.java
  6. Client.java

所需的Jar文件

要运行此示例,您需要加载以下jar文件:

  • Spring Core jar文件
  • Spring Remoting jar文件
  • Spring AOP jar文件

1) Calculation.java

这是一个简单的接口,包含一个cube方法。

package cn.javatiku;  
  
public interface Calculation {  
int cube(int number);  
}  

2) CalculationImpl.java

这个类提供了Calculation接口的实现。

package cn.javatiku;  
  
public class CalculationImpl implements Calculation{  
  
    @Override  
    public int cube(int number) {  
        return number*number*number;  
    }  
  
}  

3) applicationContext.xml

在这个xml文件中,我们定义了CalculationImpl类和RmiServiceExporter类的bean。我们需要为RmiServiceExporter类的以下属性提供值:

  • service
  • serviceInterface
  • serviceName
  • replaceExistingBinding
  • registryPort
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans.xsd">  
  
<bean id="calculationBean" class="cn.javatiku.CalculationImpl"></bean>  
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">  
    <property name="service" ref="calculationBean"></property>  
    <property name="serviceInterface" value="cn.javatiku.Calculation"></property>  
    <property name="serviceName" value="CalculationService"></property>  
    <property name="replaceExistingBinding" value="true"></property>  
    <property name="registryPort" value="1099"></property>  
</bean>  
</beans>  

4) client-beans.xml

在这个xml文件中,我们为RmiProxyFactoryBean定义了bean。您需要定义该类的两个属性。

  • serviceUrl
  • serviceInterface
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans.xsd">  
      
<bean id="calculationBean" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">  
<property name="serviceUrl" value="rmi://localhost:1099/CalculationService"></property>  
<property name="serviceInterface" value="cn.javatiku.Calculation"></property>  
</bean>  
</beans>  

5) Host.java

它只是获取ApplicationContext的实例。但是您需要首先运行这个类来运行示例。

package cn.javatiku;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class Host{  
public static void main(String[] args){  
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
System.out.println("Waiting for requests");  
}  
}  

6) Client.java

这个类获取Calculation的实例并调用方法。

package cn.javatiku;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class Client {  
public static void main(String[] args)  {  
ApplicationContext context = new ClassPathXmlApplicationContext("client-beans.xml");  
Calculation calculation = (Calculation)context.getBean("calculationBean");  
System.out.println(calculation.cube(7));  
}  
}  

如何运行此示例

首先编译并运行Host.java

然后,编译并运行Client.java

标签: spring, Spring教程, Spring技术, Spring语言学习, Spring学习教程, Spring下载, Spring框架, Spring框架入门, Spring框架教程, Spring框架高级教程, Spring面试题, Spring笔试题, Spring编程思想