背景
团队内部轮流共享技术,其他人共享源代码。 每次我在设计和架构上,都觉得自己太武断了。 现在分组共享源代码。
概念
服务提供程序接口:服务提供程序接口。 是JVM级别的服务注册发现机制。
谁在使用
在jdbc源代码中看到过SPI,在Dubbo源代码中看到过SPI,在Eleasticsearch源代码中看到过SPI……在基础服务中的使用比率很高。
如何判断是否有用
如上图所示,如果在META-INF/services下可以看到类似的完全限定名,八九将离不开十。
怎么使用
服务注册发现机制的简单实现是找到满足需求的服务后返回。 调用第一个服务异常崩溃后,接着查找下一个服务。 SPI的最简单使用也是如此。
1定义服务端
step1:实现服务接口
step2:在meta-INF/services下创建接口的完全限定文件名文件,并编码为utf8。
step3)在文件中协商接口的实现类的完全限定名可以是一个或列表
2定义客户端
step1(通过Java.util.service loader.load方法加载服务实现(也可以用@SPI对框架进行注释) )。
step2:根据得到的数据自己注册发现
这也是驱动程序管理器中的一个方法,找到可以使用的东西就返回了。
原理
服务端很理解。 是定义。 客户端看看服务加载器的源。
设计
依赖接口而不是实现,可以灵活地重新拔插。