从Hessian RPC 注解方式看Spring依赖注入

前言

Hessian 是一个binary-rpc协议轻量级RPC调用框架,相对于咱们常见的DubboSpring Cloud 使用起来方便简洁。git

基于Spring IOC 实现Hessian注解形式服务发布与服务消费。从实现过程深刻了解Spring 依赖注入的原理。github

Hessian 使用

HessianServiceProxyExporterbash

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 服务消费ide

@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使用同样。post

@Autowired
private IUserService userService;
复制代码

咱们从上述的使用Hessian的服务开发过程当中会发现每个Hessian服务的开发都会有一一对应的服务暴露,服务引用。当系统比较庞大的时候就会增长服务管理的难度与大量的重复代码学习

Hessian 注解实现

随着Spring Boot普及,愈来愈多人习惯于注解开发模式。Hessian 也能够实现注解模式的开发与使用。ui

@HessianService

咱们先来分析下Hessian服务暴露的过程:spa

  • 实例化一个Service Bean
  • 实例化一个HessianServiceExporter bean
  • 将HessianServiceExporter 注册到IOC容器中进行统一管理 这样咱们就能够定义一个组合注解@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 Bean实例化后但在设值显示属性以前回调(实现额外injection策略)
  • postProcessPropertyValues 实现依赖注入

以上便实现了Hessian的注解模式

@HessianService
public class StudentServiceImpl  implements IStudentService{
}
复制代码
@HessianReference
private IUserService userService;
复制代码

小结

上述实现过程当中,咱们可明显看出:基于Spring framework的开发中 一切的Bean操做都围绕IOC容器进行;并体现了Spring framework一个很重要的核心思想面向扩展开放 ,Spring framework 提供了多种可供扩展的接口,经过实现接口中的方法可实现个性化业务(如上述中的@ HessianReference依赖注入)

此篇文章的重点不是实现Hessian注解模式,而是经过Hessian注解模式的实现过程学习Spring良好的设计分层(面向扩展开放):经过分层的设计使得咱们的代码具高可扩展性

源码在这里

相关文章
相关标签/搜索