Java中SPI机制简单演示

Java中SPI机制简单演示

写一个SpiService接口

public interface SpiService {void run();}

写两个实现类,注意:实现类可以跨包

@Slf4j
public class SpiServiceImpl1 implements SpiService {@Overridepublic void run() {log.warn("SpiServiceImpl1");}}
@Slf4j
public class SpiServiceImpl2 implements SpiService {@Overridepublic void run() {log.warn("SpiServiceImpl2");}}
第一种,交给Spring管理
  • 在src/main/resources目录下创建META-INF文件夹
  • 在META-INF文件夹下spring文件夹
  • 在spring文件夹下创建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件
  • 文件中填写实现类的全限定名
    在这里插入图片描述
    在这里插入图片描述
测试
	@Autowiredprivate ApplicationContext applicationContext;@Testpublic void test2(){SpiService spiService = SpringUtil.getBean(SpiServiceImpl2.class);log.warn("spiService:{}", spiService);spiService.run();}@Testpublic void test5(){SpiServiceImpl2 spiServiceImpl2 = applicationContext.getBean(SpiServiceImpl2.class);spiServiceImpl2.run();}

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

第二种,用ServiceLoader.load装载
  • 在src/main/resources目录下创建META-INF文件夹
  • 在META-INF文件夹下services文件夹
  • 在spring文件夹下创建接口的全限定名文件
  • 文件中填写实现类的全限定名
    在这里插入图片描述
    在这里插入图片描述
测试
	@Testpublic void test3() {// ServiceLoaderUtil是hutool工具包提供的工具SpiService spiService = ServiceLoaderUtil.loadFirstAvailable(SpiService.class);spiService.run();}@Testpublic void test4(){// ServiceLoader是java自带的工具ServiceLoader<SpiService> spiServices = ServiceLoader.load(SpiService.class);for (SpiService spiService : spiServices) {spiService.run();}}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单破除github的2FA验证

简单破除github的2FA验证 文章目录 简单破除github的2FA验证&#x1f468;‍&#x1f3eb;Authenticator工具 &#x1f468;‍&#x1f3eb;Authenticator工具 最近使用github的时候发现要搞一个2FA的验证才可以 验证的途径有两种&#xff1a;一种是用手机电话验证&#xff0c;…

使用easyYapi生成文档

easyYapi生成文档 背景1.安装配置1.1 介绍1.2 安装1.3 配置1.3.1 Export Postman1.3.2 Export Yapi1.3.3 Export Markdown1.3.4 Export Api1.3.6 常见问题补充 2. java注释规范2.1 接口注释规范2.2 出入参注释规范 3. 特定化支持3.1 必填校验3.2 忽略导出3.3 返回不一致3.4 设置…

关于JavaScript常用命令

JS&#xff08;JavaScript&#xff09;是一种用于构建交互式网页的脚本语言&#xff0c;常用于前端开发。以下是一些常用的JS命令及其简要说明&#xff0c;希望能够帮助您更好地了解JS的基础知识。 1. **变量声明与赋值** - var, let, const: 用于声明变量&#xff0c;var在…

第二证券|高速连接概念再度活跃,沃尔核材5日涨近60%,胜蓝股份等走高

高速连接概念26日盘中再度走强&#xff0c;到发稿&#xff0c;胜蓝股份涨超13%&#xff0c;沃尔核材涨停&#xff0c;华丰科技、奥飞数据涨超5%。 值得注意的是&#xff0c;沃尔核材近5个交易日已收成4个涨停板&#xff0c;累计大涨近60%。公司近来在投资者互动平台表示&#…

Disruptor消费线程等待策略

以下按等待最快到最慢策略排序 BusySpinWaitStrategy BusySpinWaitStrategy相当于while(true)不停的轮询&#xff0c;跑动起来会迅速把CPU打满&#xff0c;适合延迟要求苛刻的业务场景&#xff0c;但是缺点是非常吃CPU YieldingWaitStrategy 轮询完成使用yield函数让出CPU资…

宽光谱SOA光芯片设计(一)

-本文翻译自由Geoff H. Darling于2003年撰写的文章。尽管文章较早&#xff0c;但可以了解一些SOA底层原理&#xff0c;并可看到早期SOA研究的思路和过程&#xff0c;于今仍有很高借鉴价值。 摘要 本文介绍一种新型宽光谱半导体光放大器&#xff08;SOA&#xff09;技术&#x…

【数据分享】中国土壤有机质数据集(免费获取)

中国土壤有机质数据集对于农业、生态环境保护等领域具有重要意义。通过对土壤有机质等多项指标的统计和分析&#xff0c;可以更好地了解土壤的特性&#xff0c;指导合理的土壤管理和保护措施的制定&#xff0c;从而促进农业生产的可持续发展&#xff0c;并为生态环境保护提供科…

数据结构与算法之美学习笔记:《数据结构与算法之美》学习指导手册

目录 前言 前言 本节课程思维导图&#xff1a; 在设计专栏内容的时候&#xff0c;为了兼顾不同基础的同学&#xff0c;我在内容上做到了难易结合&#xff0c;既有简单的数组、链表、栈、队列这些基础内容&#xff0c;也有红黑树、BM、KMP 这些难度较大的算法。但是&#xff0c;…

利用云手机高效运营多个海外社媒账户

随着全球化进程的不断推进&#xff0c;中国出海企业和B2B外贸企业日益重视海外社媒营销&#xff0c;将其视为抢占市场份额的关键策略。在海外社媒营销中&#xff0c;企业通常会在多个平台上批量开通账户&#xff0c;搭建自己的社媒内容矩阵。本文将会介绍如何用云手机高效运营多…

格雷希尔G25F系列快速接头,在新能源电池包气密性测试时的各种电气接插件的应用

一些大的新能源电池制造商如&#xff1a;比亚迪、宁德时代、国轩高科、亿纬锂能、东方时代等&#xff0c;在全球的新能源电池市场上占据着重要的地位。新能源PACK电池包在生产时&#xff0c;需要经过一些严苛的测试&#xff0c;用以检测产品的品质是否达到合格标准&#xff0c;…

基于React的低代码平台开发实践

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;在线地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

宝塔设置限制ip后,ip改了之后 ,登陆不上了

前言 今天作死&#xff0c;在宝塔面板设置界面&#xff0c;将访问面板的ip地址限制成只有自己电脑的ip才能访问&#xff0c;修改之后直接人傻了&#xff0c;“403 forbidden”。吓得我直接网上一通搜索&#xff0c;还好&#xff0c;解决方法非常简单。 解决方法 打开ssh客户…

探索AI大模型学习:挖掘技术的无限可能

标题&#xff1a; 探索AI大模型学习&#xff1a;挖掘技术的无限可能 在当今技术环境中&#xff0c;AI大模型学习已成为研究者和工程师们的热门话题。不仅需要深厚的数学基础和编程能力&#xff0c;还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xf…

skimage求凸包、包络

给一幅分割 label&#xff0c;求某个物体的凸包&#xff08;convex hull&#xff09;[1]和包络&#xff08;polygon&#xff09;[2]&#xff0c;所得是一幅 0/1 的 mask。凸包、包络都是包含物体的&#xff0c;分别在于包络不要求凸&#xff0c;可以更细致地勾勒物体形状。例&a…

【OpenModelica】4命令行大全

命令行大全 文章目录 命令行大全一、Summary of Commands for the Interactive Session Handler二、Running the compiler from command line 一、Summary of Commands for the Interactive Session Handler 以下是交互式会话处理器中当前可用命令的完整列表。 • simulate(mo…

中国500米逐年植被净初级生产力(NPP)数据集(2000-2022)

净初级生产力(NPP)是指植物在单位时间单位面积上由光合作用产生的有机物质总量中扣除自养呼吸后的剩余部分&#xff0c;是生产者能用于生长、发育和繁殖的能量值&#xff0c;反映了植物固定和转化光合产物的效率&#xff0c;也是生态系统中其他生物成员生存和繁衍的物质基础。其…

电脑控制面板在哪?5招教你快速打开!

“我在执行一个任务时要进入电脑的控制面板中查看&#xff0c;但是我不知道电脑的控制面板在哪&#xff0c;谁能帮帮我呀&#xff1f;” 电脑控制面板是一个系统文件夹&#xff0c;它提供了各种对计算机系统进行设置和管理的工具。控制面板允许用户查看并操作基本的系统设置&am…

我不想使用 CSS 样式,你知道在 HTML 中有什么标签可以加粗文本么

网页设计过程中&#xff0c;我们经常会遇到需要加粗文本来凸显特定文本的情况。 <b> 标签在强调文本时扮演着不可或缺的角色&#xff0c;它就像是我们语言中的语气词&#xff0c;虽微不足道&#xff0c;但能有效地抓住读者的注意力。 1. 基础语法 什么是 <b> 标…

Leetcode 76 最小覆盖子串 java版

官网链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 1. 问题&#xff1a; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 …

document.getElementById(‘username‘).value 是什么

document.getElementById(username).value; 这段代码是 JavaScript 中用于获取 HTML 元素的值的常见方式。 document 是 JavaScript 中代表当前文档&#xff08;即 HTML 页面&#xff09;的对象。getElementById(username) 是 document 对象的方法&#xff0c;用于获取具有指定…