Java 的SPI方式可以动态的加载扩展类,但是用法不是很灵活,DUBBO框架因为存在多个扩展点所以实现了自定义的一种扩展方式,也就是实现了作者提到的微核心,插件式的思路。
比如,需要扩展Dubbo的协议,只需在xxx.jar中放置:
文件:META-INF/services/com.alibaba.dubbo.rpc.Protocol
内容为:com.alibaba.xxx.XxxProtocol
Dubbo通过ServiceLoader扫描到所有Protocol实现。
这样的一种扩展思路本身是非常符合OO的思想,如果要扩展一种新的实现,只需要配置和新写实现即可,甚至不需要动原来的jar包,直接放在扩展包。当每一个地方都使用扩展的时候就出现了一种管道式的架构。
在dubbo框架的每一个有多种实现或者潜在实现的关键点,作者都使用了这种方式,实现了微核心,插件式的开发模式。之前对以微核心这种思想一直理解的不是很深入,看了dubbo后,有了新的认识。此外作者在这些切入点还支持包装和过滤监听等功能,当有个性化的需求的时候是很容易切入这个点。此为为了管理这些扩展点,dubbo实现了一个庞大的工厂类来支持或者和加载这些类,而具体需要使用什么具体扩展实例,都是通过上层传递的参数来确定的。通过这样的设计:
1、实现了微核心。通过这种方式,代码的关键代码非常的少,主流程逻辑非常清楚,在设计最初对细节不是很确定的情况下,但是主要流程固定的情况下可以使用这种方式,将后来的需求作为实现,个人化的需求,可以作为插件的监听或者连接器配置,这样可以使得主流程非常的清晰,也符合OO的思想。
2、便于测试。因为使用了这样的方式,每个功能点都是扩展,可以针对每个点进行测试,每个组件因为都只承担了一个功能,所以可以针对一个功能点进行测试。
3、便于扩展,当需需求变化需要变动功能时,可以针对扩展点进行写新的实现。或者开发新的插件,这样不会动到原来的东西。
总之,dubbo是一个良好的微核心插件式的例子,通过对dubbo的学习,可以领悟这种设计的优点和可扩展性,进而对理解OO思想也很有帮助。
相关推荐
dubbo spi源理代码,从源理的角度去理解dubbo spi的设计原理
dubbo spi可扩展机制源码解析
SPI 全称为 Service Provider Interface,是一种服务发现机制。
dubbo-2.6.0 源码
dubbo的核心思想就是SPI思想,想读懂dubbo源码应该认真的看下,详细的讲解了dubbo的SPI思想,从为什么,是什么,怎么做的来分析了dubbo的spi思想
shican-spi 参考 dubbo spi 基于 JDK spi
1.为什么dubbo要自己设计一套SPI.txt
Java SPI 机制与 Dubbo SPI 机制的一些说明与测试代码 方便SPI的学习 该项目来自于享学课堂学习资料 请勿随意商业使用
dubbo资源 dubbo-admin dubbo demo
本项目只适合dubbo入门学习者,高手请不要浪费金钱; 本项目技术栈 springboot, dubbo ,无 zookeeper 本项目旨在提供最单纯的 dubbo 服务提供者 和消费者的点对点直连,而摒弃任何多余技术对dubbo直连的理解
dubbo示例代码dubbo-sample
incubator-dubbo-dubbo-2.6.1
dubbo资源包
本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...
本文深入剖析了Dubbo的可扩展机制SPI的源码,带领读者从理论到实践全面理解其工作原理和应用方法。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,其可扩展机制SPI是其核心特性之一,能够帮助开发者轻松...
前段时间排查某问题的时候,想要快速知道某些dubbo接口(三无)的响应结果,但不想启动项目(因为这些项目不是你负责的,不会部署而且超级笨重),也不想新建一个dubbo客户端项目(占地方),也不想开telnet客户端...
更改了dubbo的demo的代码,
Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和...