SPI 简介
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,
通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟是JDK的一种标准。
而后,把新加的实现,描述给JDK知道就行啦(通过改一个文本文件即可)公司内部,目前Dubbo框架就基于SPI机制提供扩展功能。
我们首先需要一个目录,META-INF\services 如下,最终的目录路径就像这样:
文件名字为 接口/抽象类: 全名 文件内容: 接口/抽象类 实现类
就像这样:com.spi.impl.TextHellocom.chaochao.spi.impl.ImageHello
实现类:
最后,来看看,如果使用SPI机制,客户端代码:
最后的输出:Text Hello.Image Hello。
dubbo的扩展机制和java的SPI机制非常相似,但是又增加了如下功能:
1 可以方便的获取某一个想要的扩展实现,java的SPI机制就没有提供这样的功能
2 对于扩展实现IOC依赖注入功能:
举例来说:接口A,实现者A1、A2。接口B,实现者B1、B2。
现在实现者A1含有setB()方法,会自动注入一个接口B的实现者,此时注入B1还是B2呢?都不是,而是注入一个动态生成的接口B的实现者B$Adpative,该实现者能够根据参数的不同,自动引用B1或者B2来完成相应的功能
3 对扩展采用装饰器模式进行功能增强,类似AOP实现的功能
以下面的例子为例来分析下:
其中Protocol接口定义如下:
对应的实现者如下:
ExtensionLoader中含有一个静态属性:
ConcurrentMap, ExtensionLoader>EXTENSION_LOADERS = new ConcurrentHashMap, ExtensionLoader>();
用于缓存所有的扩展加载实例,这里加载Protocol.class,就以Protocol.class为key,创建的ExtensionLoader为value存储到上述EXTENSION_LOADERS中
这里没有进行任何的加载操作。
我们来看下,ExtensionLoader实例是如何来加载Protocol的实现类的:
1 先解析Protocol上的Extension注解的name,存至String cachedDefaultName属性中,作为默认的实现
2 到类路径下的加载 META-INF/services/com.alibaba.dubbo.rpc.Protocol文件
相关推荐
SPI 全称为 Service Provider Interface,是一种服务发现机制。
Dubbo调用java接口程序
dubbo spi可扩展机制源码解析
dubbo源码分析系列.
Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,其可扩展机制SPI是其核心特性之一,能够帮助开发者轻松实现服务的动态扩展。本文首先对SPI的基本概念进行了详细解析,然后通过源码级别的解读,深入探讨了...
dubbo的核心思想就是SPI思想,想读懂dubbo源码应该认真的看下,详细的讲解了dubbo的SPI思想,从为什么,是什么,怎么做的来分析了dubbo的spi思想
本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...
Dubbo基本原理机制Dubbo基本原理机制
dubbo-2.6.0 源码
在之前的一个《Java学习之SpringBoot整合SSM Demo》分享中说到搭建ZooKeeper和Dubbo分布式框架中遇到了一些技术问题没能成功,只分享了其中的一个中间产物,那就是大家看到的《Java学习之SpringBoot整合SSM Demo》...
1.为什么dubbo要自己设计一套SPI.txt
某课网必学的后端开发技术,包括shell,zookeeper,dubbo,java,redis,nginx等一系列最新最全的视频
摘要: Dubbo 管控台可以对注册到 zookeeper 注册中心的服务或服务消费者进行管理,但 管控台是否正常对 Dubbo 服务没有影响,管控台也不需要高可用,因此可以单节点部署。 管理控制台主要包含:路由规则,动态配置,...
java高级技术Dubbo视频教程,需要学习Dubbo高级技术的朋友可以下载看看,绝对物超所值
Dubbo+zookeeper调用java接口 简单的Demo 内有运行需要的jar包
dubbo spi源理代码,从源理的角度去理解dubbo spi的设计原理
基于java的开发源码-服务框架 Dubbo.zip 基于java的开发源码-服务框架 Dubbo.zip 基于java的开发源码-服务框架 Dubbo.zip 基于java的开发源码-服务框架 Dubbo.zip 基于java的开发源码-服务框架 Dubbo.zip 基于java的...