`
zhaomingzm_23
  • 浏览: 33630 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring RMI 入门技术

阅读更多
对于一个Java接口来说,如果使用者和其实现类不在同一环境,比如实现类在网络的其他机器,那么如何来访问接口实现类的逻辑呢?答案是远程方法调用。简称RMI。

Spring 简化了RMI的实现过程,我们现在只要配置好即可正确发布我们的RMI服务。

package com.spring.rmi.common;

public interface IPerson {
	
	public String getName();
	
	public String getEmail();
	
}


package com.spring.rmi.common.impl;

import com.spring.rmi.common.IPerson;

public class PersonImpl implements IPerson {

	@Override
	public String getName() {
		return "mike";
	}

	@Override
	public String getEmail() {
		return "zhaoming23@gmail.com";
	}

}


服务端配置文件:server-rmi.xml

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- 1.用RMI发布的接口实现类 -->
	<bean id="personImpl" class="com.spring.rmi.common.impl.PersonImpl" />

	<!-- 2.利用Spring类发布这个RMI服务 -->
	<bean id="service" class="org.springframework.remoting.rmi.RmiServiceExporter">
		<property name="service">
			<!-- 2.1指定服务的实现 -->
			<ref bean="personImpl" />
		</property>
		<property name="serviceName">
			<!-- 2.2指定服务的名字 -->
			<value>person</value>
		</property>
		<property name="serviceInterface">
			<!-- 2.3指定服务的接口 -->
			<value>com.spring.rmi.common.IPerson</value>
		</property>
		<property name="registryPort">
			<!-- 2.4指定服务的端口 -->
			<value>5923</value>
		</property>
	</bean>
</beans>


package com.spring.rmi;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class RmiBootstrap {
	
	public static void main(String[] args) throws InterruptedException {
		new ClassPathXmlApplicationContext("server-rmi.xml");
		Thread.sleep(1000 * 60 * 60 );
	}
	
	
}


这样就启动了我们的RMI服务,那么客户端如果使用呢?


客户端配置文件:client-rmi.xml

<?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:aop="http://www.springframework.org/schema/aop"
	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.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<bean id="person" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<property name="serviceInterface">
			<value>com.spring.rmi.common.IPerson</value>
		</property>
		<property name="serviceUrl">
			<value>rmi://localhost:5923/person</value>
		</property>
	
	</bean>
</beans>



package client;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.rmi.common.IPerson;

public class RmiInvoke {
	private static final Logger logger = Logger.getLogger(RmiInvoke.class);
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("client-rmi.xml");
		IPerson p = (IPerson) context.getBean("person");
		
		logger.info(p.getName());
		logger.info(p.getEmail());
	}
}


运行结果
etc...
16:55:12 [main] INFO (RmiInvoke.java:15) - mike
16:55:12 [main] INFO (RmiInvoke.java:16) - zhaoming23@gmail.com


以上代码运行还需要必要的jar包
Spring相关jar包
aopalliance.jar
apache commons-logging.jar



在实际使用中还有一种情况是开多个服务

其实只要在服务端多配置一个类似的RmiServiceExporter
当然发布的时候注意名称不要相同即可。
分享到:
评论

相关推荐

    RMI入门例子和教程,分初级、进阶,还有与Spring整合的

    自己收集了一些跑得通的教程,并自己整理给出了,入门例子。包括:最原生的使用javac和rmic的例子;还有进一步的,使用IDM,用代码代理原生rmic...还有RMI和Spring整合的例子。 另外附有:例子说明 和 一些简单的教程。

    java Spring+RMI入门程序源代码

    本项目提供了一个入门级的源代码示例,帮助开发者理解如何在 Spring 环境下集成 RMI 技术。以下是关于这两个技术及其整合的详细知识点: **Spring 框架** 1. **Spring 概述**:Spring 是一个开源的 Java 应用开发...

    RMI入门小结

    【RMI(Remote Method Invocation)入门小结】 ...随着技术的发展,例如JMS、Web Services和现代微服务框架(如Spring Cloud)等,虽然在某些场景下替代了RMI,但RMI在简单、快速的分布式解决方案中仍然具有实用价值。

    JAVA-RMI使用快速入门.doc

    【JAVA-RMI使用快速入门】 Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式应用程序的一种核心技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,实现了"Write Once, ...

    spring入门好教程

    随着EJB 3.0的发布,其编程模型在很大程度上受到了Spring IoC特性和Hibernate的启发,但EJB仍然在某些特定应用场景中保持着其独特的功能,如分布式事务管理和RMI远程调用。 总的来说,Spring框架通过其全面的目标和...

    Spring Framework 4 参考文档中文版.docx

    * Spring Framework 支持声明式的事务管理,支持通过 RMI 或 Web 服务远程访问您的逻辑,支持以多种方式持久化数据。 * Spring Framework 提供了一个功能全面的 MVC 框架,能够在您未察觉的情况下将 AOP 功能集成到...

    Spring Security3技术手册

    了解如何配置这些过滤器是入门Spring Security的关键。 - **示例代码**: 在`web.xml`中配置`&lt;filter&gt;`和`&lt;filter-mapping&gt;`,定义Spring Security的入口。 - **1.2 使用命名空间** - Spring Security支持在`...

    SpringRecipes

    《Spring Recipes》不仅适合初学者入门学习Spring框架,也适用于有一定经验的开发者进一步提升技能。书中丰富的示例和详尽的解释能够帮助读者快速理解和掌握Spring的关键技术和最佳实践。对于想要深入了解Spring并将...

    spring官方文档

    ### Spring框架概述与核心知识点解析 #### 一、Spring框架概览 **Spring框架**是一个为企业级应用提供...通过深入了解Spring的核心概念和技术特点,开发者能够更好地利用Spring框架的优势,提高开发效率和应用质量。

    开源框架 Spring Gossip

    RMI Hessian、 Burlap Http Invoker &lt;br&gt;邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....

    spring-framework-5.0 中文文档PDF

    在入门指南部分,文档可能提供了如何开始使用Spring Framework的基础知识,包括一些基础概念和必要的配置,帮助新手快速上手。 接着,在介绍Spring框架的章节中,文档可能介绍了Spring的整体架构,包括它的各种模块...

    word源码java-fleet-spring-boot:SpringBoot教程,SpringBoot的各种简单示例,快速入门使用Sprin

    word源码java fleet-spring-boot ...RMI 远程调用框架 :Spring Boot Hessian 远程调用框架 :Spring Boot Forest Http 请求 :Spring Boot HTTP 访问控制 :Spring Boot GraphQL 构建 API :Spring Boot

    [Pro.Spring.3(2012)].Clarence.Ho.文字版

    通过阅读《Pro.Spring.3(2012)》,读者不仅能够全面掌握Spring框架的核心知识和应用技巧,还能够深入了解Spring生态系统的其他重要项目和技术,为构建高质量的Java应用打下坚实的基础。无论是初学者还是有经验的...

    Spring In Action 2005

    讲解如何利用Spring框架实现远程服务调用,包括RMI、Hessian、 Burlap等多种远程调用技术的集成。 **第7章:访问企业服务** 介绍如何使用Spring框架与企业级服务进行交互,如JMS、JNDI、JTA等,以及如何处理复杂的...

    Spring教程

    Spring AOP通过拦截技术实现了这一功能。 **1.2 AOP概念** AOP的主要概念包括: - **切面**:封装了横切关注点的行为。 - **连接点**:应用程序执行过程中某个特定位置。 - **通知**:在特定连接点执行的代码块。 ...

    spring in action

    - **Spring Jumpstart**部分介绍了Spring的基本概念和技术特点,帮助读者快速入门Spring框架。 - **为什么选择Spring**:Spring提供了一种简单的方式来解决企业级应用中的复杂问题,例如事务管理、持久化层的抽象、...

    Spring_Security3中文指南.pdf

    ### Spring Security 3.0 入门与核心概念详解 #### 一、Spring Security简介 Spring Security 是一款功能强大且高度可定制的应用安全框架,它为基于 Java 的应用程序提供了全面的安全服务。尤其对于那些采用 ...

Global site tag (gtag.js) - Google Analytics