Skip to content

SPI

它是由Java 6 引入的用于发现服务实现的功能。我认为它实现了Service Locator设计模式。

它通过如下几个部分来工作:

  • 声明API层,API层一般包含服务接口定义,以及涉及的数据类型。它将被应用和实现者依赖。
  • 实现API层,实现者依赖API模块,提供服务接口的实现。最后在resources/META-INF/services目录中创建所实现的服务接口全量限定名作为文件名,内容是实现类的全量限定名。
  • 应用层,依赖API模块,使用ServiceLoader.load等方法来查询实现,从而使用该服务。

另外服务提供者以扩展的形式安装,需要把其jar文件我们引入到应用程序类路径、Java 扩展类路径或用户定义的类路径中。若类路径里没有此项,将依然无法提供服务。

拓展阅读