前言
Hessian
是一个binary-rpc
协议轻量级RPC调用框架,相对于我们常见的Dubbo
,Spring Cloud
使用起来方便简洁。
基于Spring IOC
实现Hessian
注解形式服务发布与服务消费。从实现过程深入了解Spring 依赖注入的原理。
Hessian 使用
HessianServiceProxyExporter
1 | 复制代码public class HessianServiceProxyExporter extends HessianServiceExporter { |
hessian 服务暴露
1 | 复制代码@Bean(name = "/userService") |
hessian 服务消费
1 | 复制代码@Bean |
将hessian 服务初始化到Spring IOC容器中后与普通Service使用一样。
1 | 复制代码@Autowired |
我们从上述的使用Hessian的服务开发过程中会发现每一个Hessian服务的开发都会有一一对应的服务暴露,服务引用。当系统比较庞大的时候就会增加服务管理的难度与大量的重复代码
Hessian 注解实现
随着Spring Boot普及,越来越多人习惯于注解开发模式。Hessian 也可以实现注解模式的开发与使用。
@HessianService
我们先来分析下Hessian服务暴露的过程:
- 实例化一个Service Bean
- 实例化一个HessianServiceExporter bean
- 将HessianServiceExporter 注册到IOC容器中进行统一管理
这样我们就可以定义一个组合注解@HessianService
1 | 复制代码Documented |
Service Bean的实例交由Spring IOC来处理
通过实现InitializingBean
, ApplicationContextAware
相应的接口处理@HessianService
服务暴露
@HessianReference
consumer 消费服务,借鉴@Autowired
实现思路:继承InstantiationAwareBeanPostProcessorAdapter
重载postProcessPropertyValues
方法
InstantiationAwareBeanPostProcessorAdapter
Bean实例化后但在设值显示属性之前回调(实现额外injection策略)postProcessPropertyValues
实现依赖注入
以上便实现了Hessian的注解模式
1 | 复制代码@HessianService |
1 | 复制代码@HessianReference |
小结
上述实现过程中,我们可明显看出:基于Spring framework
的开发中 一切的Bean操作都围绕IOC
容器进行;并体现了Spring framework
一个很重要的核心思想面向扩展开放
,Spring framework
提供了多种可供扩展的接口,通过实现接口中的方法可实现个性化业务(如上述中的@ HessianReference
依赖注入)
此篇文章的重点不是实现Hessian
注解模式,而是通过Hessian
注解模式的实现过程学习Spring
良好的设计分层(面向扩展开放):通过分层的设计使得我们的代码具高可扩展性
本文转载自: 掘金