比如 Dubbo 中提供一系列的扩展:
同类型的 RPC 框架 motan 中也提供了响应的扩展:
他们的使用方式都和 Java SPI 非常类似,只不过原理略有不同,同时也新增了一些功能。
比如 motan 的 spi 允许是否为单例等等。
再比如 MySQL 的驱动包也是利用 SPI 来实现自己的连接逻辑。
总结Java 自身的 SPI 其实也有点小毛病,比如:
遍历加载所有实现类效率较低。
当多个 ServiceLoader 同时 load 时会有并发问题(虽然没人这么干)。
最后总结一下,SPI 并不是某项高深的技术,本质就是面向接口编程,而面向接口本身在我们日常开发中也是必备技能,所以了解使用 SPI 也是很用处的。