内容简介:基于
Hessian 是一个 binary-rpc 协议轻量级RPC调用框架,相对于我们常见的 Dubbo , Spring Cloud 使用起来方便简洁。
基于 Spring IOC 实现 Hessian 注解形式服务发布与服务消费。从实现过程深入了解Spring 依赖注入的原理。
Hessian 使用
HessianServiceProxyExporter
public class HessianServiceProxyExporter extends HessianServiceExporter {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//此处可做统一数据验签
log.info("HessianServiceProxyExporter get request at {}" , LocalDateTime.now());
super.handleRequest(request ,response);
}
}
复制代码
hessian 服务暴露
@Bean(name = "/userService")
public HessianServiceExporter initHessian(){
HessianServiceExporter exporter = new HessianServiceProxyExporter();
exporter.setService(new UserServiceImpl());
exporter.setServiceInterface(IUserService.class);
return exporter;
}
复制代码
hessian 服务消费
@Bean
public HessianReferenceProxyFactoryBean helloClient() {
HessianReferenceProxyFactoryBean factory = new HessianReferenceProxyFactoryBean();
factory.setServiceUrl("http://127.0.0.1:8080/userService");
factory.setServiceInterface(IUserService.class);
return factory;
}
复制代码
将hessian 服务初始化到Spring IOC容器中后与普通Service使用一样。
@Autowired private IUserService userService; 复制代码
我们从上述的使用Hessian的服务开发过程中会发现每一个Hessian服务的开发都会有一一对应的服务暴露,服务引用。当系统比较庞大的时候就会增加服务管理的难度与大量的重复代码
Hessian 注解实现
随着Spring Boot普及,越来越多人习惯于注解开发模式。Hessian 也可以实现注解模式的开发与使用。
@HessianService
我们先来分析下Hessian服务暴露的过程:
@HessianService
Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface HessianService {
/**
* hessian服务名称
* @return
*/
String name() default "";
}
复制代码
Service Bean的实例交由Spring IOC来处理
通过实现 InitializingBean , ApplicationContextAware 相应的接口处理 @HessianService 服务暴露
@HessianReference
consumer 消费服务,借鉴 @Autowired 实现思路:继承 InstantiationAwareBeanPostProcessorAdapter 重载 postProcessPropertyValues 方法
InstantiationAwareBeanPostProcessorAdapter postProcessPropertyValues
以上便实现了Hessian的注解模式
@HessianService
public class StudentServiceImpl implements IStudentService{
}
复制代码
@HessianReference private IUserService userService; 复制代码
小结
上述实现过程中,我们可明显看出:基于 Spring framework 的开发中 一切的Bean操作都围绕 IOC 容器进行;并体现了 Spring framework 一个很重要的核心思想 面向扩展开放 , Spring framework 提供了多种可供扩展的接口,通过实现接口中的方法可实现个性化业务(如上述中的 @ HessianReference 依赖注入)
此篇文章的重点不是实现 Hessian 注解模式,而是通过 Hessian 注解模式的实现过程学习 Spring 良好的设计分层(面向扩展开放):通过分层的设计使得我们的代码具高可扩展性
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ACM/ICPC程序设计与分析
沈云付 / 清华大学 / 2010-7 / 39.50元
《ACM/ICPC程序设计与分析(C++实现)》介绍ACM国际大学生程序设计竞赛概况及程序设计基础,系统介绍数论、组合数学、动态规划、计算几何、搜索、图论和网络流等专题的典型算法,挑选历年竞赛中许多有代表性的竞赛题作为例题进行分析,便于学生编程时模仿学习。每章的例题和习题都配有输入输出样例,方便学生在编程时测试与调试程序。《ACM/ICPC程序设计与分析(C++实现)》以C++为程序设计语言,以提......一起来看看 《ACM/ICPC程序设计与分析》 这本书的介绍吧!