使用Spring框架实现远程服务暴露与调用
一、前言
Spring框架提供了通过HTTP协议实现远程调用的方式,具体是调用方使用HttpInvokerProxyFactoryBean生成一个代理对象,通过代理对象远程通过http服务调用服务提供方法的服务并,服务提供方通过HttpInvokerServiceExporter在服务端暴漏远程调用接口。
二、远程服务暴露
2.1 简单使用
第一步需要定义需要暴露的服务接口和实现
public interface UserServiceBo {
String sayHello(String name);
String sayHello2(String name);
String testPojo(Person person);
}
public class UserServiceImpl implements UserServiceBo{
@Override
public String sayHello(String name) {return name;
}@Override
public String sayHello2(String name) {return name;
}@Override
public String testPojo(Person person) {return JSON.toJSONString(person);
}
}
第二步创建服务导出HttpInvokerServiceExporter的实例
<bean id="userService" class="com.test.UserServiceImpl" />
<bean name="useServiceExporter" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="userService" />
<property name="serviceInterface" value="com.test.UserServiceBo" />
</bean>
第三步 暴露远程服务的URL
<bean id="simpleUrlRequestHandler"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true" />
<property name="urlMap">
<map>
<entry key="/remote/test/userService" value-ref="useServiceExporter" />
</map>
</property>
</bean>
注意这个bean要配置到dispatcher类的配置文件里面。
2.2 原理
image.png
三、远程服务调用
3.1 简单使用
HttpInvokerProxyFactoryBean factoryBean = new HttpInvokerProxyFactoryBean();
factoryBean.setServiceUrl("http://127.0.0.1:7001/test/userService.do");
factoryBean.setServiceInterface(UserServiceBo.class);
factoryBean.afterPropertiesSet();
UserServiceBo userService = (UserServiceBo) factoryBean.getObject();
System.out.println(userService.sayHello("jiaduo"));
3.2 原理
image.png
四、总结
Spring框架提供了通过HTTP协议实现远程调用的方式,我们可以通过重写invoker自定义http请求header和body传递一些信息到服务暴露端,比如函数签名指,序列化协议等。
通过重写exporter可以进行鉴权操作,比如进行函数签名校验,然后可以定制反序列化方式。
转载于:https://blog.51cto.com/13634103/2093416
使用Spring框架实现远程服务暴露与调用相关推荐
- Spring框架IoC和传统bean调用的区别
传统方式:通过接口访问对象必须经过实例化,这样就必然增加了代码之间的耦合度,而其调用时必须了解接口实现类中定义的内容,同时不同意对生成的对象进行管理. 容器管理方式:当程序中用到该对象时,依赖容器进行 ...
- spring框架学习 - Data Access之 事务管理 - 声明式事务管理
接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...
- 在Spring框架中使用SQL存储过程
Spring框架也支持对SQL存储过程的调用,SQL存储过程是一组预先定义好的SQL语句,并存储到数据库管理系统中,外部程序可以直接调用执行.本课主要讨论在Spring框架中应用程序如何调用MySQL ...
- Spring框架基础学习小结。概念,文件配置
spring框架 百度概念一大堆,我之阐述自己的理解. 概念:分层的轻量级的开源框架.两大内核为IOC(反转控制:将创建对象交给spring框架处理)和AOP(面向切面编程:对动态代理的再次增强) 分 ...
- 系统开发系列 之MyEclipse创建WebService详细教程和调用教程(spring框架+maven+CXF框架)
1 回顾 [系统开发系列 之MyEclipse创建WebService详细教程和调用教程]介绍了使用JWS实现WebService接口的发布和调用,主要涉及的点有: (1)MyEclipse点击Fil ...
- Redis:Spring框架下Redis的配置和调用,xml文件中redis的配置,redisTemplate的使用和jedis的使用
老规矩了,再次重复一遍,配置XML文件为Spring框架所属,所使用的框架是Spring,非SpringBoot!!! Spring框架整合Redis并且使用 1.配置文件 <bean clas ...
- 关于Spring框架(官方文档)
反应性堆栈上的Web Version 5.1.0.RELEASE 目录 1. Spring WebFlux 1.9.反应铁心 1.10.使用DispatcherHandler 1.11.带注释控制器 ...
- 使用Spring框架的好处
转自:https://www.cnblogs.com/hoobey/p/6032506.html 在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JD ...
- Spring 系列: Spring 框架简介
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. 在这篇由三部 ...
最新文章
- 好久没有看到这么有建设性德文章,由衷地赞叹《知其所以然地学习(以算法学习为例)》-By 刘未鹏(pongba)
- 关于VMware Linux 虚拟机忘记root 密码找回
- Oracle 11g新特性之--只读表(read only table)
- java以太网通讯西门子plc300_西门子300以太网通讯-工业支持中心-西门子中国
- python利用unittest进行测试用例执行的几种方式
- asp.net学习资源列表
- UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)
- [算法天天练] 归并排序
- ceph客户端使用_ceph存储之ceph客户端
- jar k8s 自己的 部署_微服务架构 - 离线部署k8s平台并部署测试实例
- 目标检测——数据清洗的学习笔记
- ES6快速入门——类与对象
- python中的列表推导与生成器
- 一个api请求的流程
- 怎么查期刊是核心、是EI,还是SCI
- C语言利用switch的简单计算器
- 19张网络工程师必看的思维导图
- 【AiLearning】test2:搭建Shallow Netural Network
- ueditor插入图片调节框显示bug
- android记账app开发全过程,android开发实战-记账本APP(一)