目录
什么是SPI
SPI 全称为 Service Provider Interface,一种解耦接口和实现的手段,其实现原理是将接口的实现类全名称配置在配置文件中,程序运行阶段去读取配置文件加载实现类,这个机制为程序带来 了很强的扩展性,使 得我们可以很方便的 基于某接口规范去使用任何第三方的实现。
SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。在 Dubbo 中,SPI 是一个非常重要的模块。如果大家想要学习 Dubbo 的源码,SPI 机制务必弄懂。下面,我们先来了解一下 Java SPI 与 Dubbo SPI 的使用方法,然后再来分析 Dubbo SPI 的源码。
SPI 的工作原理
-
定义服务接口:首先定义一个服务接口,通常这个接口会包含在 JAR 文件中。
-
提供服务实现:开发者可以通过创建该接口的具体实现类来提供服务。实现类的信息会被写入到
META-INF/services
目录下的一个文件中,文件名就是服务接口的全限定名,而文件内容则是实现类的全限定名。 -
查找服务实现:当需要使用该服务时,可以通过
ServiceLoader
类来加载所有可用的服务实