对于一个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
当然发布的时候注意名称不要相同即可。
分享到:
相关推荐
自己收集了一些跑得通的教程,并自己整理给出了,入门例子。包括:最原生的使用javac和rmic的例子;还有进一步的,使用IDM,用代码代理原生rmic...还有RMI和Spring整合的例子。 另外附有:例子说明 和 一些简单的教程。
本项目提供了一个入门级的源代码示例,帮助开发者理解如何在 Spring 环境下集成 RMI 技术。以下是关于这两个技术及其整合的详细知识点: **Spring 框架** 1. **Spring 概述**:Spring 是一个开源的 Java 应用开发...
【RMI(Remote Method Invocation)入门小结】 ...随着技术的发展,例如JMS、Web Services和现代微服务框架(如Spring Cloud)等,虽然在某些场景下替代了RMI,但RMI在简单、快速的分布式解决方案中仍然具有实用价值。
【JAVA-RMI使用快速入门】 Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式应用程序的一种核心技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,实现了"Write Once, ...
随着EJB 3.0的发布,其编程模型在很大程度上受到了Spring IoC特性和Hibernate的启发,但EJB仍然在某些特定应用场景中保持着其独特的功能,如分布式事务管理和RMI远程调用。 总的来说,Spring框架通过其全面的目标和...
* Spring Framework 支持声明式的事务管理,支持通过 RMI 或 Web 服务远程访问您的逻辑,支持以多种方式持久化数据。 * Spring Framework 提供了一个功能全面的 MVC 框架,能够在您未察觉的情况下将 AOP 功能集成到...
了解如何配置这些过滤器是入门Spring Security的关键。 - **示例代码**: 在`web.xml`中配置`<filter>`和`<filter-mapping>`,定义Spring Security的入口。 - **1.2 使用命名空间** - Spring Security支持在`...
《Spring Recipes》不仅适合初学者入门学习Spring框架,也适用于有一定经验的开发者进一步提升技能。书中丰富的示例和详尽的解释能够帮助读者快速理解和掌握Spring的关键技术和最佳实践。对于想要深入了解Spring并将...
### Spring框架概述与核心知识点解析 #### 一、Spring框架概览 **Spring框架**是一个为企业级应用提供...通过深入了解Spring的核心概念和技术特点,开发者能够更好地利用Spring框架的优势,提高开发效率和应用质量。
RMI Hessian、 Burlap Http Invoker <br>邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....
在入门指南部分,文档可能提供了如何开始使用Spring Framework的基础知识,包括一些基础概念和必要的配置,帮助新手快速上手。 接着,在介绍Spring框架的章节中,文档可能介绍了Spring的整体架构,包括它的各种模块...
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)》,读者不仅能够全面掌握Spring框架的核心知识和应用技巧,还能够深入了解Spring生态系统的其他重要项目和技术,为构建高质量的Java应用打下坚实的基础。无论是初学者还是有经验的...
讲解如何利用Spring框架实现远程服务调用,包括RMI、Hessian、 Burlap等多种远程调用技术的集成。 **第7章:访问企业服务** 介绍如何使用Spring框架与企业级服务进行交互,如JMS、JNDI、JTA等,以及如何处理复杂的...
Spring AOP通过拦截技术实现了这一功能。 **1.2 AOP概念** AOP的主要概念包括: - **切面**:封装了横切关注点的行为。 - **连接点**:应用程序执行过程中某个特定位置。 - **通知**:在特定连接点执行的代码块。 ...
- **Spring Jumpstart**部分介绍了Spring的基本概念和技术特点,帮助读者快速入门Spring框架。 - **为什么选择Spring**:Spring提供了一种简单的方式来解决企业级应用中的复杂问题,例如事务管理、持久化层的抽象、...
### Spring Security 3.0 入门与核心概念详解 #### 一、Spring Security简介 Spring Security 是一款功能强大且高度可定制的应用安全框架,它为基于 Java 的应用程序提供了全面的安全服务。尤其对于那些采用 ...