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

栏目: Java · 发布时间: 6年前

内容简介:基于

Hessian 是一个 binary-rpc 协议轻量级RPC调用框架,相对于我们常见的 DubboSpring 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 服务暴露

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

@HessianReference

consumer 消费服务,借鉴 @Autowired 实现思路:继承 InstantiationAwareBeanPostProcessorAdapter 重载 postProcessPropertyValues 方法

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

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

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

小结

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

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

源码在这里


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

奇点系列

奇点系列

彼得•蒂尔、里德•霍夫曼、本•霍洛维茨、埃里克•杰克逊等 / 高玉芳、路蒙佳、杨晓红、徐彬等 / 中信出版社 / 2015-6-20 / 182.00

1.硅谷创投教父、PayPal创始人彼得•蒂尔、LinkedIn创始人里德•霍夫曼、创业导师本•霍洛维茨、“PayPal黑帮”初创成员埃里克•杰克逊联合作品。 2.彼得•蒂尔与埃隆•马斯克的首次交锋,PayPal从0到1改变全球金融的生死突围,商业硬汉的创业史诗,揭秘“PayPal黑帮”的创业维艰与联盟关系。 3.《人民日报》推荐创业者必读书目!“奇点系列”的作者们以及“PayPal黑......一起来看看 《奇点系列》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码