Dubbo 的 SPI 机制?

发布于

一、SPI 定义

Service Provider Interface,服务提供接口。Java 有自带 SPI,Dubbo 对其增强。

二、Dubbo SPI 优势

  • 按需加载,不一次性加载所有实现。
  • 支持自适应扩展(@Adaptive),运行时动态选择实现。
  • 支持自动包装(Wrapper),AOP 能力。
  • 支持依赖注入。

三、使用

  1. 接口加 @SPI 注解。
  2. META-INF/dubbo/ 下配置文件:key=实现类全限定名。
  3. ExtensionLoader.getExtensionLoader(接口.class).getExtension("key")。

四、@Adaptive

动态生成代理类,根据 URL 参数选择具体实现,避免硬编码。Dubbo 的 Protocol、LoadBalance 等都用自适应扩展。

五、应用

Dubbo 的协议、负载均衡、序列化、注册中心等全部通过 SPI 实现,可灵活扩展。