SPI思想机制

目录

    • 如何解释
      • 简单概括
      • SPI 和 API
      • SPI 实现原理(重要-线程上下文类加载器)
    • 如何使用
    • 一个Demo
      • 功能介绍
      • 使用效果(直接在本地模拟服务商提供服务)
      • 使用效果(通过 jar 的方式引入)
    • 应用分析
    • 参考文章

如何解释

简单概括

  • 全称 Service Provider Interface,其实是一种插件思想,是一种面向接口编程的思想,即 先定义好一组接口功能,让其他用户/服务提供商 实现该功能,然后自己直接调用 别人实现的功能

SPI 和 API

  • API,是开发商先写好实现类,对外提供接口,客户再使用(api 是站在开发者的角度说的)
  • SPI,是客户先定义好接口,然后开发商编写该接口的实现类,客户再使用(spi是站在客户的角度说的)

SPI 实现原理(重要-线程上下文类加载器)

  • spi 的实现主要依赖 类加载器 + 线程上下文类加载器,简单来说,其他服务商提供 对应的的实现类.class,客户只需要使用 类加载器加载这些类就可以使用了,但是 现有的 双亲委派模型下 是不支持的。
    • 前提
    • 子加载器所加载的类能够访问父加载器所加载的类。(双亲委派运行机制)
    • 父加载器所加载的类无法访问到子加载器所加载的类。
  • 借助 线程上下文类加载器(Context Classloader) 可以实现 父加载器访问子加载器 加载的类
    • 在双亲委托模型下,类加载是由下至上的,即下层的类加载器会委托上层进行加载。
    • 但是对于SPI来说,有些接口是Java核心库所提供的,而Java核心库是由启动类加载器来加载的,而这些接口的实现却来自于不同的jar包(厂商提供), Java的启动类加载器是不会加载其他来源的jar包,这样传统的双亲委托模型就无法满足SPI的要求。
    • 而通过给当前线程设置上下文类加载器,就可以由设置的上下文类加载器来实现对于接口实现类的加载。

如何使用

  1. ClassPath 下需要一个目录: META/services
  2. 目录里放一个配置文件
    1. 文件名:需要扩展的接口的 全限定接口名
    2. 文件内容:已经实现的类的 全限定类名(包名+基础类名)
  3. 通过 java.util 包里的 ServiceLoad() 方法动态加载 需要的实现类

一个Demo

功能介绍

  • 自己的程序提供 Search 接口,其他服务商实现 多种搜索,包括:FileSearch, DatabaseSearch
  • 在自己的程序里通过 SPI 使用服务商实现的 FileSearch, DatabaseSearch

使用效果(直接在本地模拟服务商提供服务)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用效果(通过 jar 的方式引入)

  • 埋坑…

应用分析

  • jdbc, spring, jar,
  • 埋坑…

参考文章

  • https://juejin.cn/post/6998044832199344142
  • https://pdai.tech/md/java/advanced/java-advanced-spi.html
  • https://zhuanlan.zhihu.com/p/28909673

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/594650.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器:Docker-Consul的容器服务更新与发现

目录 前言 一、什么是服务注册与发现 二、 Docker-Consul 概述 1、Consul 概念 2、Consul 提供的一些关键特性 3、Consul 的优缺点 4、传统模式与自动发现注册模式的区别 4.1 传统模式 4.2 自动发现注册模式 5、Consul 核心组件 5.1 Consul-Template组件 5.2 Consu…

Blazor流程编排的艺术:深入Z.Blazor.Diagrams库的使用与实践

合集 - .Net(3)1.基于AntSK与LLamaSharp打造私人定制的离线AI知识库03-032.深入解析:AntSK 0.1.7版本的技术革新与多模型管理策略03-123.Blazor流程编排的艺术:深入Z.Blazor.Diagrams库的使用与实践05-05收起 为现代网页应用开发提供动力的其中一…

招展工作的接近尾声“2024上海国际科技创新展会”即将盛大开幕

2024上海国际科技创新展会,即将于6月中旬在上海新国际博览中心盛大召开。随着招展工作的接近尾声,目前仍有少量余位可供各企业和机构预定。这一盛大的科技展会,将汇聚全球智能科技领域的精英,共同展示最新的科技成果,探…

【Spring】JdbcTemplate

JdbcTemplate 是 Spring 提供的一个 JDBC 模板类,是对 JDBC 的封装,简化 JDBC 代码 也可以让 Spring 集成其它的 ORM 框架,例如:MyBatis、Hibernate 等 使用 JdbcTemplate 完成增删改查 一、环境准备 数据库: 准备…

【JavaEE 初阶(二)】线程安全问题

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多线程知识 目录 1.前言2.synchronized2.1例子2.2synchronized修饰代码块2.3 synchronized修饰方法2.4sy…

one command each day on Linux- big synopsis

url address 1.12) grep Linux下面查找文本命令grep, 类似于Window编辑器的ctrlF查找我们想要的内容, PS:对比learning skill 看一下它的基础用法,准备一个目录文件和文本文件, 打印出这个单词,或者包含有这个字母的所有字符串 [rootiZ2vc5lqzt23aweti4j777Z ~]# grep hel…

智慧校园需要从哪些维度去做?

智慧校园作为校园信息化的关键产品,已经成为校园建设的标配。智慧校园是一个业务平台,他涉及校园事务的各个方面。智慧校园同时又是一个数据中心,他存储了所有的校园基础数据与业务数据,包括教工数据、学工数据、教务数据等。那么…

嘴尚绝卤味:传承经典,缔造美食新风尚

卤味,作为中国传统美食的代表之一,历经千年的传承与发展,早已成为无数食客餐桌上的宠儿。而在这个美食盛行的时代,嘴尚绝卤味凭借其独特的口感和精湛的工艺,成为卤味市场中的佼佼者,引领着卤味文化的新潮流…

基于java,SpringBoot和Vue的智慧校园在线考试留言讨论系统设计

摘要 基于Java, SpringBoot和Vue的智慧校园在线考试留言讨论系统是一个为现代教育需求定制的Web应用,它结合了最新的前后端技术来提供一个互动性强、用户友好的学习和交流平台。该系统旨在通过提供实时留言和讨论功能,增进学生间的互动以及师生之间的沟…

Altman确认:神秘Chatbot非GPT-4.5,OpenAI搜索引擎即将上线

🚀 Altman确认:神秘Chatbot非GPT-4.5,OpenAI搜索引擎即将上线 摘要:近日,Sam Altman在哈佛大学的演讲中确认,引发广泛猜测的gpt2-chatbot并非OpenAI即将发布的下一代模型GPT-4.5。与此同时,关于…

游戏AI的智能化:机器学习在虚拟生命中的应用

文章目录 写在前面游戏AI的智能化:机器学习在虚拟生命中的应用游戏内容的自动化创作:机器学习的革新性应用玩家体验的个性化优化:机器学习的定制化力量未来展望:机器学习塑造游戏行业新纪元游戏AI的智能化发展自动化内容生成的革命…

proteus使用问题

1、无法和视频里面一样新建工程 2、实验效果和视频不也一样 自己的电路图(灯不亮):

PADS 规则设置-导线不跟随器件-导线允许回路

1、PADS Layout中设置拖动器件时导线不跟着移动 2、PADS Router中设置走线允许回路

面试题:String类型长度有限制吗?最大多少?

简介 Java中String是有长度限制的。String还有长度限制?是的有,而且在JVM编译中还有规范,String长度限制的场景(将某固定文件转码成Base64的形式用字符串存储,在运行时需要的时候在转回来,当时文件比较大),那这个规范限制到底是怎么样的,我们分析下。 …

扩展学习|结合故事的力量和数字的力量:混合方法研究和混合研究综述

文献来源:Pluye, Pierre, and Quan Nha Hong. "Combining the power of stories and the power of numbers: mixed methods research and mixed studies reviews." Annual review of public health 35 (2014): 29-45. 文献获取:链接&#xff1…

企业宣传新思路!制作三维动画,塑造品牌形象

三维动画又称之为3D动画,通过三维动画技术模拟真实物体的方式使其成为一个有用的工具。其精确性、真实性和可操作性,被广泛应用于影视、工业、电子、广告等诸多领域。 三维动画是在现代技术不断创新发展的基础上而产生的新型艺术表现形式,已…

深入解析C#特殊字符:概念、分类与使用方法

文章目录 前言一、特殊字符的定义二、特殊字符的分类与作用1.转义字符2. 格式字符3. 逻辑运算符4. 运算符5. 字符串6. 注释 三、$:字符串内插(String Interpolation)四、:逐字字符串(Verbatim Strings)五、…

爱奇艺文娱知识图谱的构建与应用实践

2012年5月,Google发布了知识图谱(Knowledge Graph),以提升搜索引擎返回的答案质量和用户查询的效率。有了知识图谱作为辅助,搜索引擎能够洞察用户查询背后的语义信息,返回更为精准、结构化的信息,更大可能地满足用户的…

界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器(一)

如今当用户需要处理PDF文件时,通常不得不下载应用程序或者浏览器插件,控制用户如何与PDF交互并不是一件容易的事。如果我们提供PDF作为内容,用户可以下载它并使用浏览器或PDF本身提供的控件进行交互。然而,一些企业可能希望控制用…

PN结击穿与电容效应分析

PN结是半导体器件中的一个基本结构,它由P型半导体和N型半导体紧密接触并相互结合在一起形成。P型半导体富含空穴(正电荷载体),是通过掺入受主杂质原子得到的;而N型半导体富含自由电子(负电荷载体&#xff0…
最新文章