Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制,提供了通过interface寻找implement的方法。
SPI,全称Service Provider Interfaces
,服务提供接口。是Java提供的一套供第三方实现或扩展使用的技术体系。主要通过解耦服务具体实现以及服务使用,使得程序的可扩展性大大增强,甚至可插拔。
基于服务的注册与发现机制,服务提供者向系统注册服务,服务使用者通过查找发现服务,可以达到服务的提供与使用的分离,甚至完成对服务的管理。
JDK中,基于SPI的思想,提供了默认具体的实现,ServiceLoader
。利用JDK自带的ServiceLoader
,可以轻松实现面向服务的注册与发现
,完成服务提供与使用的解耦
。
完成分离后的服务,使得服务提供方的修改或替换,不会给服务使用方带来代码上的修改,基于面向接口的服务约定,提供方和使用方各自直接面向接口编程,而不用关注对方的具体实现。同时,服务使用方使用到服务时,也才会真正意义上去发现服务
,以完成服务的初始化
,形成了服务的动态加载
。
在Java或Android系统实现或项目实践领域,也有直接基于ServiceLoader
的功能实现,或基于ServiceLoader
实现基础上,对其进行的进一步扩展与优化使用。
作者:HappyCorn
链接:https://juejin.cn/post/6844903891746684941
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。