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机制的更多相关文章

  1. Java spi机制浅谈

    最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制. 所以简单的总结下java spi机制的思想. 我们系统里抽象的各个模块,往往有很多不同的实现方案,比 ...

  2. JDK源码解析之Java SPI机制

    1. spi 是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件. 系统设计的各个抽象,往往 ...

  3. 聊聊Java SPI机制

    一.Java SPI机制 SPI(Service Provider Interface)是JDK内置的服务发现机制,用在不同模块间通过接口调用服务,避免对具体服务服务接口具体实现类的耦合.比如JDBC ...

  4. Java SPI机制实战详解及源码分析

    背景介绍 提起SPI机制,可能很多人不太熟悉,它是由JDK直接提供的,全称为:Service Provider Interface.而在平时的使用过程中也很少遇到,但如果你阅读一些框架的源码时,会发现 ...

  5. 组件化框架设计之Java SPI机制(三)

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将从深入理解java SPI机制来介绍组件化框架设计: ...

  6. Java SPI 机制实现解耦与本地化

    SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface,可以避免在 Java 代码中写死服务的提供者,而是通过 SPI 服务加载机制进行服务的注册和 ...

  7. Java SPI机制详解

    Java SPI机制详解 1.什么是SPI? SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.SPI是一种动态替换发现的机制, 比如有个 ...

  8. java SPI机制

    1. SPI是Service Provider Interfaces的简称.根据Java的SPI规范,我们可以定义一个服务接口,具体的实现由对应的实现者去提供,即Service Provider(服务 ...

  9. Java SPI机制学习笔记

    最近在阅读框架源代码时,常常看到 SPI 的子包, 忍不住查了下: Service Provider Interface : 服务提供接口. JavaSPI 实际上是“基于接口的编程+策略模式+配置文 ...

  10. Java SPI机制简介

    SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现 ...

随机推荐

  1. k8s组件和网络插件挂掉,演示已有的pod是否正常运行

    环境 03 master ,05 06是node [root@mcwk8s03 mcwtest]# kubectl get nodes -o wide NAME STATUS ROLES AGE VE ...

  2. Java求两个List集合的交集、并集、差集

    在项目中经常会求解集合的交集.并集.差集,这里做个记录.首先创建两个集合list1.list2以及添加元素. List<String> list1 = new ArrayList<& ...

  3. 关于正在开发中的DjangoStarter v3版本

    前言 最近做的这个项目大量使用了 python 及其相关的生态,因此自然而然选择了我的 DjangoStarter 作为后端框架 之前 v2 版本是用 RestFramework 做接口的,后面我试用 ...

  4. python logger 打印日志错误行数

    python logger 打印日志错误行数 import logging app = Flask(__name__) # 配置日志 handler = logging.FileHandler('ap ...

  5. MYSQL8-快速生成表结构(用于生成文档)

    各种工具都有,没有特别趁手的.不如自己用sql处理. SELECT column_name AS CODE, CASE WHEN column_comment IS NULL OR TRIM(colu ...

  6. shell脚本获取函数返回值

    方式1 原理:return返回的值可以通过$?得到. 缺点:return只能返回整数 #!/bin/sh function test() { return 100 } test echo $? 方式2 ...

  7. 01-Python介绍、安装与入门

    Python介绍 关于Python Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. 解释型:Python将代码边解释边运行,而不是像C一样编译.类似解释型的语言还有JAVA. ...

  8. Linux特殊权限之SBIT

    简单点,说话的方式简单点: 用于修饰目录 其他用户x位替换成t 作用:目录属主在该目录下创建的文件只有该属主能删除

  9. .NET使用CsvHelper快速读取和写入CSV文件

    前言 在日常开发中使用CSV文件进行数据导入和导出.数据交换是非常常见的需求,今天我们来讲讲在.NET中如何使用CsvHelper这个开源库快速实现CSV文件读取和写入. CsvHelper类库介绍 ...

  10. HunggingFace的镜像加速站

    方法一:使用huggingface 官方提供的 **huggingface-cli** 命令行工具.(1) 安装依赖pip install -U huggingface_hub (2) 基本命令示例: ...