API vs SPI
参考 juejin.cn/post/684490… SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.
- 接口的定义和实现都在服务方的时候,仅暴露出接口给调用方使用的时候,我们称为API
- 接口的定义在调用方的时候(实现在服务方),我们给它也取个名字SPI
SPI的使用场景
- MySql驱动的选择driverManager根据配置来确定要使用的驱动
- dubbo框架中的扩展机制
META-INF/services定义好要实现的接口(文件名)和实现类(文件内容), ServiceLoader加载的时候没有实例化实现类,而是在Iterator遍历的时候去用反射创建了实例.