Java面试题更新 2026-08-05

请解释 Dubbo 中的 SPI 机制及其作用,并说明它与 Java 自带的 SPI 机制有何不同?

技术原理Apache DubboJava

考察说明

考察对 Dubbo SPI 机制的理解及其与 Java SPI 的区别。

回答思路

  1. 【回答框架 1】SPI 即服务提供者接口,是一种服务发现机制。它允许在运行时动态替换或扩展实现,而不需要修改核心代码。Java SPI 通过 META-INF/services 目录下的配置文件指定接口的实现类,使用 ServiceLoader 加载。
  2. 【回答框架 2】Dubbo SPI 是对 Java SPI 的增强。它在 META-INF/dubbo 或 META-INF/services 目录下配置接口实现,但配置文件格式支持 key=value 形式,key 为扩展名,value 为实现类。它支持按需加载、依赖注入、自适应扩展和自动激活等特性。
  3. 【回答框架 3】关键区别:Java SPI 会实例化所有配置的实现类,而 Dubbo SPI 支持按名称获取指定扩展,可懒加载;Dubbo SPI 还提供 IoC 功能,可为扩展类注入其他扩展;Dubbo SPI 支持对扩展实现进行包装和排序,通过 @Activate 注解实现条件激活。
  4. 【关键点 1】Dubbo SPI 是增强版 SPI,支持按需加载和依赖注入。
  5. 【关键点 2】Java SPI 通过 ServiceLoader 加载 META-INF/services 中的实现类。
  6. 【关键点 3】Dubbo SPI 配置文件使用 key=value 格式,key 是扩展名。
  7. 【易错点 1】不要混淆 Dubbo SPI 和 Java SPI 的加载机制,Dubbo SPI 支持按名获取,Java SPI 会加载所有实现。
  8. 【易错点 2】注意 Dubbo SPI 的依赖注入会自动注入其他扩展,可能导致循环依赖风险。