浅谈 Spring SPI 机制
ProjectDaedalus
共 3948字,需浏览 8分钟
· 2024-04-11
这里介绍Spring下的SPI机制
abstract.png 基本实践Spring SPI借鉴了Java SPI的设计思想。其通过spring.factories方式来实现SPI机制。实现在不修改框架源码的前提下提供框架的扩展性。具体地,我们先来定义一个SPI接口
package com.aaron.application.SpringSpi.BasicSpiDemo;
public interface Greet {
void hello();
void bye();
}
然后提供下述3个实现类:CatGreet、DogGreet、PigGreet
package com.aaron.application.SpringSpi.BasicSpiDemo;
public class CatGreet implements Greet{
@Override
public void hello() {
System.out.println("<Cat> : Hello...");
}
@Override
public void bye() {
System.out.println("<Cat> : Bye...");
}
}
package com.aaron.application.SpringSpi.BasicSpiDemo;
public class DogGreet implements Greet {
@Override
public void hello() {
System.out.println("<Dog> : Hello...");
}
@Override
public void bye() {
System.out.println("<Dog> : Bye...");
}
}
package com.aaron.application.SpringSpi.BasicSpiDemo;
public class PigGreet implements Greet {
@Override
public void hello() {
System.out.println("<Pig> : Hello...");
}
@Override
public void bye() {
System.out.println("<Pig> : Bye...");
}
}
然后,在src/main/resources/META-INF路径下创建spring.factories文件。按行添加各SPI接口及其下的所有实现类,多个实现类间使用逗号进行分隔;当一行较长时,还可以使用 续行符反斜杠\ 来进行换行。文件内容如下所示
# 语法规范
# <接口A的全限定类名> = <实现类A1的全限定类名>, <实现类A2的全限定类名>, <实现类A3的全限定类名>
# <接口B的全限定类名> = <实现类B1的全限定类名>, <实现类B2的全限定类名>, <实现类B3的全限定类名>
# <接口C的全限定类名> = <实现类C1的全限定类名>, <实现类C2的全限定类名>, <实现类C3的全限定类名>
com.aaron.application.SpringSpi.BasicSpiDemo.Greet = \
com.aaron.application.SpringSpi.BasicSpiDemo.PigGreet, \
com.aaron.application.SpringSpi.BasicSpiDemo.CatGreet, \
com.aaron.application.SpringSpi.BasicSpiDemo.DogGreet
figure 1.png
现在我们来测试下
package com.aaron.application.SpringSpi.BasicSpiDemo;
import org.springframework.core.io.support.SpringFactoriesLoader;
import java.util.List;
public class SpringSpiBasicTest {
public static void main(String[] args) {
List<Greet> greetList = SpringFactoriesLoader.loadFactories(Greet.class, SpringSpiBasicTest.class.getClassLoader());
for (Greet greet : greetList) {
System.out.println("-----------------------");
greet.hello();
greet.bye();
}
}
}
测试结果如下所示,符合预期
figure 2.png评论
学一学 Spring Boot 3.x
在 Java 后端开发领域,功能强大的 Spring 开源框架不仅是首选,也是事实上的标准。但由于 Spring 存在配置烦琐、部署不易、依赖管理困难等问题,因此基于 Spring 的快速开发框架 Spring Boot 应运而生,它能大大简化 Spring 应用程序的配置和部署过程。2018 年,
小哈学Java
0
有意思!一个关于 Spring 历史的在线小游戏
发现 Spring One 的官网上有个好玩的彩蛋,分享给大家!进到Spring One的官网,可以看到右下角有个类似马里奥游戏中的金币图标。点击该金币之后,会打开一个新的页面,进入下面这样一个名为:The History Of Spring 的在线小游戏你可以使用上下左右的方向键来控制Spring
公众号程序猿DD
1
【深度学习】图解自注意力机制(Self-Attention)
一、注意力机制和自注意力机制的区别Attention机制与Self-Attention机制的区别传统的Attention机制发生在Target的元素和Source中的所有元素之间。简单讲就是说Attention机制中的权重的计算需要Target来参与。即在Encoder-Decoder 模型中,At
机器学习初学者
0
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0
图解 transformer 中的自注意力机制
↓推荐关注↓本文将将介绍注意力的概念从何而来,它是如何工作的以及它的简单的实现。注意力机制在整个注意力过程中,模型会学习了三个权重:查询、键和值。查询、键和值的思想来源于信息检索系统。所以我们先理解数据库查询的思想。假设有一个数据库,里面有所有一些作家和他们的书籍信息。现在我想读一些Rabindra
Python学习与数据挖掘
0
浅谈几款XML文档解析工具以及优缺点
一、简介XML,一种可扩展标记语言,通常被开发人员用来传输和存储数据,定义也比较简单,通常如下方式开头,用来表述文档的一些信息。<?xml version="1.0" encoding="UTF-8"?>例如下面这个简单的文档。<?xml versio
Stephen
1
Spring Boot + flowable 快速实现工作流
关注我们,设为星标,每天7:40不见不散,架构路上与您共享回复架构师获取资源大家好,我是你们的朋友架构君,一个会写代码吟诗的架构师。来源:blog.csdn.net/zhan107876/article/details/120815560总览一、flowable-ui部署运行二、绘制流程图绘图细节:
Java架构师社区
0
Spring Boot 优雅实现多租户架构
来源:blog.csdn.net/u010349629/article/details/130737253👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0
小哈学Java
10