可见 spi 的核心机制是接口到具体实现类的关联由一个文件描述。
总结 spi 的服务描述文件的要素。
1、文件通常要放在某个约定的目录(上面 demo 中使用的java spi 规定的就是META-INF/services)
2、文件名和文件内容要体现接口和实现类的关联(java spi 中该文件名需为接口名,文件内容为实现类全限定名)
3、文件可以编写多份,都能被相关加载类加载(这样框架可以有内置的实现类,同时用户和第三方扩展包可以加入自己写的实现类扩展功能)
具体的 spi 实现过程中还有很多细节,比如要大量使用Map 做缓存以加快非首次访问的速度,比如接口的实现类都需要提供无参数构造器方便进行实例化等等。
后续会具体讲解一下 dubbo 的 spi 的实现过程和诸多细节。
java 的 spi
dubbo的spi介绍