【Java】SPI机制
SPI全称:
服务供应商接口 Service Provider Interface
服务发现机制
入门概念视频来自于:
https://www.bilibili.com/video/BV1E44y1N7Nk
其它参考:
https://www.bilibili.com/video/BV1t44y127Uq
提供一个接口规范:
package cn.cloud9.spi; /**
* @projectName: Java
* @author: Cloud9
* @date: 2022年05月26日 10:39
* @version: 1.0
*/
public interface ISpiService {
void function();
}
对应提供实现类A:
package cn.cloud9.spi; /**
* @projectName: Java
* @author: Cloud9
* @date: 2022年05月26日 10:40
* @version: 1.0
*/
public class SpiServiceA implements ISpiService {
@Override
public void function() {
System.out.println("服务A实现!");
}
}
实现类B:
package cn.cloud9.spi; /**
* @projectName: Java
* @author: Cloud9
* @date: 2022年05月26日 10:41
* @version: 1.0
*/
public class SpiServiceB implements ISpiService {
@Override
public void function() {
System.out.println("服务B实现!");
}
}
通常调用办法是多态,接口类型应用具体实现类
1、SPI规范要求实现类的资源描述放在META-INF/services目录下面
2、编写的文件名就是接口的名称
3、文件内容就是对应的实现类的类名

实际访问获取时,通过服务加载器根据接口的字节对象去翻查实现资源
package cn.cloud9.spi; import java.util.ServiceLoader; /**
* @projectName: Java
* @author: Cloud9
* @date: 2022年05月26日 09:07
* @version: 1.0
*/
public class SpiTest {
public static void main(String[] args) {
ServiceLoader<ISpiService> loader = ServiceLoader.load(ISpiService.class); for (ISpiService spiService : loader) {
spiService.function();
}
}
}
执行结果:
服务A实现!
服务B实现! Process finished with exit code 0
【Java】SPI机制的更多相关文章
- Java spi机制浅谈
最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制. 所以简单的总结下java spi机制的思想. 我们系统里抽象的各个模块,往往有很多不同的实现方案,比 ...
- JDK源码解析之Java SPI机制
1. spi 是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件. 系统设计的各个抽象,往往 ...
- 聊聊Java SPI机制
一.Java SPI机制 SPI(Service Provider Interface)是JDK内置的服务发现机制,用在不同模块间通过接口调用服务,避免对具体服务服务接口具体实现类的耦合.比如JDBC ...
- Java SPI机制实战详解及源码分析
背景介绍 提起SPI机制,可能很多人不太熟悉,它是由JDK直接提供的,全称为:Service Provider Interface.而在平时的使用过程中也很少遇到,但如果你阅读一些框架的源码时,会发现 ...
- 组件化框架设计之Java SPI机制(三)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将从深入理解java SPI机制来介绍组件化框架设计: ...
- Java SPI 机制实现解耦与本地化
SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface,可以避免在 Java 代码中写死服务的提供者,而是通过 SPI 服务加载机制进行服务的注册和 ...
- Java SPI机制详解
Java SPI机制详解 1.什么是SPI? SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.SPI是一种动态替换发现的机制, 比如有个 ...
- java SPI机制
1. SPI是Service Provider Interfaces的简称.根据Java的SPI规范,我们可以定义一个服务接口,具体的实现由对应的实现者去提供,即Service Provider(服务 ...
- Java SPI机制学习笔记
最近在阅读框架源代码时,常常看到 SPI 的子包, 忍不住查了下: Service Provider Interface : 服务提供接口. JavaSPI 实际上是“基于接口的编程+策略模式+配置文 ...
- Java SPI机制简介
SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现 ...
随机推荐
- http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别
HTTP 长连接,也称为 HTTP 持久连接(HTTP Persistent Connection)或 HTTP 连接重用,是一种在 HTTP 协议中实现的机制. 在传统的 HTTP 通信中,每个 H ...
- 前端性能优化的利器 ——— 浅谈JavaScript中的防抖和节流
防抖和节流函数是工作中两种常用的前端性能优化函数,今天我就来总结一下什么是防抖和节流,并详细说明一下如何在工作中应用防抖和节流函数 什么是防抖和节流? 在 JavaScript 中,防抖(deboun ...
- work07
day08作业: 必做题:============================================================ 第一题: 定义一个字符串s = "Hell ...
- flutter 结合 springBoot 完成登录 注册 功能
后端接口 前端调用接口代码 import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import '../page ...
- Sqlite windows11 安装与使用
首先进入Sqlite官方网址: https://www.sqlite.org/download.html 然后下载下面框起来的两个压缩文件 下载完成后解压 接下来去配置环境变量,右键此电脑->属 ...
- PhantomReference 和 WeakReference 究竟有何不同
本文基于 OpenJDK17 进行讨论,垃圾回收器为 ZGC. 提示: 为了方便大家索引,特将在上篇文章 <以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的> 中讨 ...
- 【干货】Vue3 组件通信方式详解
前言 毫无疑问,组件通信是Vue中非常重要的技术之一,它的出现能够使我们非常方便的在不同组件之间进行数据的传递,以达到数据交互的效果.所以,学习组件通信技术是非常有必要的,本文将总结Vue中关于组件通 ...
- Linux 内核:设备驱动模型(4)uevent与热插拔
Linux 内核:设备驱动模型(4)uevent与热插拔 背景 我们简单回顾一下Linux的设备驱动模型(Linux Device Driver Model,LDDM): 1.在<sysfs与k ...
- [翻译] PySide6.QtCore.Qt.ConnectionType
翻译 (自用,不保证对) PySide6.QtCore.Qt.ConnectionType 这个 enum 描述了 signals 和 slots 连接(connection) 的类型. 在一些特殊情 ...
- 基础篇:Stable Diffusion 基础原理详述
[基础篇]Stable Diffusion 基础原理详述 前言 我认为学习 ComfyUI 应该先从理论学起. 与传统绘图工具(如 Photoshop 或 Figma)相比,AI 绘图工具有着显著不同 ...