当前位置: 首页 > news >正文

Java扩展机制:SPI与Spring.factories详解

一、SPI

SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。

整体机制图如下:

SPI机制图

Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。

系统设计的各个抽象,往往有很多不同的实现方案,在面向对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。

Java SPI就是提供这样的一个机制:

为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。所以SPI的核心思想就是解耦。

准则

  1. 当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;
  2. 接口实现类所在的jar包放在主程序的classpath中;
  3. 主程序通过java.util.ServiceLoader动态装载实现模块,它通过扫描META-INF/services目录下的配置文件找到实现类的全限定名,并把类加载到JVM;
  4. SPI的实现类必须携带一个不带参数的构造方法。

使用

创建service
public abstract class ApplicationReadyProvider {private static final Log logger = LogFactory.getLog(ApplicationReadyProvider.class);public void launch(ConfigurableApplicationContext applicationContext) {logger.debug("Launch ApplicationReadyProvider: {}", this.getClass().getSimpleName())
http://www.lryc.cn/news/360482.html

相关文章:

  • iPhone 语言编程:深入探索与无限可能
  • css动态导航栏鼠标悬停特效
  • Vue中使用axios先获取头像上传参数然后上传图片到服务器-demo
  • Win11环境下Android Studio中Flutter开发环境构建(逐步解决)
  • Thread Servlet思考
  • 电源滤波器怎么选用
  • 终于更新了!时隔一年niushop多商户b2b2c的新补丁v5.0.2终于发布了,一起看看有啥新变化
  • google的chromedriver最新版下载地址
  • Gitee的原理及应用详解(四)
  • IP 协议的相关特性
  • C++11 在 Windows 环境下的多线程编程指南
  • [数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别
  • 智慧商砼搅拌车安监运营管理的创新实践
  • 渗透测试框架提权
  • tcp链接中的三次挥手是什么原因
  • 运维相关知识
  • 网络安全基础技术扫盲篇名词解释之“证书“
  • [数据集][目标检测]老鼠检测数据集VOC+YOLO格式4107张1类别
  • 12 FreeRTOS 调试与优化
  • 【Qt秘籍】[009]-自定义槽函数/信号
  • HTTPS加密
  • 搭建大型分布式服务(三十八)SpringBoot 整合多个kafka数据源-支持protobuf
  • SpringBoot如何使用日志Logback,及日志等级详解
  • 若依启动run-modules-system.bat报错问题解决方案
  • Aws CodeCommit代码仓储库
  • PostgreSQL的内存参数
  • 【教程】在CentOS上使用Docker部署前后端分离项目的完整指南
  • 某公司新招了个牛逼的架构师后.....
  • 云计算和雾计算
  • 正缘画像 api数据接口