JAVA SPI(Service Provider Interface)原理、设计及源码解析(其一)

简介: JAVA SPI(Service Provider Interface)原理、设计及源码解析(其一)

背景


团队内部轮流技术分享,其他人都是分享源码,我每次都是设计和架构,感觉自己太特立独行。这次我要合群点,分享点源码。


概念


Service Provider Interface:服务提供方接口。是一种JVM层面的服务注册发现机制。


谁在用


jdbc源码里我见过SPI、Dubbo源码里我见过SPI、Eleasticsearch源码里我见过SPI……在基础服务中使用占比很高。


怎么判断有没有用


1112728-20190420062540675-1208779853.png


如上图,META-INF/services下面能看到长的很像类的完全限定名,就八九不离十了。


怎么用


1112728-20190420062608953-1646266608.png


服务注册发现机制一个简陋的实现就是找到一个满足需求的服务就返回。如果调用第一个服务出了异常崩溃了,就接着查找下一个。SPI最简单使用也是如此。


1>定义一个服务端


step1:实现服务接口


step2:在META-INF/services下创建接口的完全限定名为文件名的文件,编码为utf8。


1112728-20190420062653220-689537099.png


step3:在文件内协商接口的实现类的完全限定名,可以是一个,也可以是一个列表


1112728-20190420062730081-526913061.png


2>定义一个客户端


step1:通过java.util.ServiceLoader.load方法来加载服务的实现(框架里也可以用@SPI注解)


1112728-20190420062759484-1503048936.png


step2:基于拿到的数据自己做注册发现


1112728-20190420062843278-852786955.png


这也是在DriverManager中的一个方法,实现了找到一个能用的就返回。


原理


服务端很好理解,就是一个定义。客户端来看看ServiceLoader的源码。


1112728-20190420062922252-333035207.png


设计


依赖接口而不是实现,灵活可插拔。

相关文章
|
6天前
|
存储 安全 算法
【常见集合】Java 常见集合重点解析
【常见集合】Java 常见集合重点解析
19 0
|
1天前
|
监控 NoSQL Java
java云MES 系统源码Java+ springboot+ mysql 一款基于云计算技术的企业级生产管理系统
MES系统是生产企业对制造执行系统实施的重点在智能制造执行管理领域,而MES系统特点中的可伸缩、信息精确、开放、承接、安全等也传递出:MES在此管理领域中无可替代的“王者之尊”。MES制造执行系统特点集可伸缩性、精确性、开放性、承接性、经济性与安全性于一体,帮助企业解决生产中遇到的实际问题,降低运营成本,快速适应企业不断的制造执行管理需求,使得企业已有基础设施与一切可用资源实现高度集成,提升企业投资的有效性。
28 5
|
3天前
|
监控 安全 NoSQL
采用java+springboot+vue.js+uniapp开发的一整套云MES系统源码 MES制造管理系统源码
MES系统是一套具备实时管理能力,建立一个全面的、集成的、稳定的制造物流质量控制体系;对生产线、工艺、人员、品质、效率等多方位的监控、分析、改进,满足精细化、透明化、自动化、实时化、数据化、一体化管理,实现企业柔性化制造管理。
25 3
|
4天前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
|
4天前
|
存储 Java
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
|
4天前
|
数据采集 监控 安全
java数字工厂MES系统全套源码Java+idea+springboot专业为企业提供智能制造MES解决方案
"MES" 指的是制造执行系统(Manufacturing Execution System)。MES在制造业中扮演着至关重要的角色,它是位于企业资源计划(ERP)系统和车间控制系统之间的系统,用于实时收集、管理、分析和报告与制造过程相关的数据。
13 0
|
4天前
|
移动开发 监控 供应链
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
一开始接触MES系统,很多人会和博主一样,对MES细节的应用不了解,这样很正常,因为MES系统相对于其他系统来讲应用比较多!
16 1
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
|
5天前
|
缓存 算法 Java
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
|
5天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
5天前
HuggingFace Tranformers 源码解析(4)
HuggingFace Tranformers 源码解析
6 0

推荐镜像

更多