SPI 机制原理
面试官问:"什么是 SPI 机制?"
候选人小谢答:"SPI 是服务提供接口,用于框架扩展。"
面试官追问:"具体是怎么实现的?"
小谢说:"用 ServiceLoader 加载?"
面试官追问:"SPI 和 API 有什么区别?"
小谢答不上来。
【面试官心理】 这道题考查的是候选人对 Java 框架扩展机制的理解。能说出 SPI 机制用于解耦和插件化、以及 JDBC 驱动注册的候选人,说明对 Java 框架生态有了解。
一、SPI 与 API 的区别 🔴
二、SPI 的核心:ServiceLoader 🔴
2.1 工作流程
2.2 ServiceLoader 源码(简化)
三、SPI 的实际应用 🔴
3.1 JDBC 驱动的 SPI 加载
3.2 SLF4J 日志门面
3.3 Dubbo 的 SPI 扩展
四、SPI 的优点与缺点 🟡
4.1 优点
- 解耦:框架不需要硬编码实现类
- 可插拔:运行时动态添加/替换实现
- 插件化:第三方可以提供实现而不修改框架代码
4.2 缺点
五、追问升级
面试官:"Dubbo 的 SPI 和 JDK 原生 SPI 有什么区别?"
【面试官心理】 能说出 Dubbo SPI 的改进点(自适应扩展、IoC、AOP)的候选人,说明对 Dubbo 框架有源码级了解。这是 P6+ 的加分点。