目录
1、简述
Dubbo SPI 增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其他扩展,同时只加载配置文件中的类,并分成不同的种类缓存在内存中,而不会立即全部初始化,性能上更好。Dubbo SPI 还兼容Java SPI的配置路劲和内容配置方式,在Dubbo启动的时候,会默认扫描这三个目录下的配置文件:META-INF/services/、META-INF/dubbo/、META-INF/dubbo/internal
2、使用步骤
2.1 pom.xml 中引入依赖
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-common -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
<version>3.0.0</version>
</dependency>
2.2 定义一个接口及对应的实现方法
# 接口定义并指定默认实现
@SPI("impl")
public interface SPIService {
void printInfo();
}
2.3 编写该接口的一个实现类
public class SPIServiceImpl implements SPIService{
@Override
public void printInfo() {
System.out.println("Hello Dubbo SPI!");
}
}
2.4 在META-INF/dubbo/internal目录下,创建接口文件
接口文件名为接口的全路径名称,如 com.test.spi.SPIService
2.5 编写文件内容
文件内容为(key,value),如 impl = com.test.spi.SPIServiceImpl,如果有多个实现类则使用换行符分隔,其中key会作为Dubbo SPI注解的传入参数。
2.6 通过ExtensionLoader来加载实现类
import org.apache.dubbo.common.extension.ExtensionLoader;
public class SPIMain {
public static void main(String[] args) {
SPIService defaultExtension = ExtensionLoader.getExtensionLoader(SPIService.class).getDefaultExtension();
defaultExtension.printInfo();
}
}
3、项目结构
4、Java SPI
详情参照 Java SPI