Java 的 SPI 机制,英文全称是 Service Provider Intrface
,常用于框架的可扩展实现。
Java 语言的 JDBC、JDNI 就使用了这种技术,甚至我们常用的 dubbo 也是在 Java SPI 机制基础上做的改进。
Service Provider Framework 的四个概念:
- Service Interface 服务接口,(这里对应 Song 接口。)
- Provider Registration API 用户注册接口,(这里对应 ParserManager.registerParser() 方法。)
- Service Access API 获取服务实例方法(这里对应 ParserManager.getSong() 方法。)
- Service Provider Interface 创建服务实现的接口,(这里对应 Parser 接口。)
所有借助 Java SPI 机制实现的框架,除了 Service Interface 服务接口不是必须的之外,其他三个都是必须要有的。
实现SPI的服务接口,在使用时是可插拔的。用户注册接口会扫描classpath路径下实现了SPI接口的类,将其注册到管理类。
在每个实现SPI接口的服务的pom文件中,引入提供接口服务的jar包依赖。并在resourses/META-INF/services下创建一个以SPI接口名为文件名的文件,在该文件中写上实现SPI接口的类名