Java面试复习总结03

Java面试复习总结03

  • 1、什么是SPI?
  • 2、SPI和API有什么区别?
  • 3、使用SPI机制的原因?
  • 4、SPI机制的优缺点?

1、什么是SPI?

  • SPI 即 Service Provider Interface ,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。
  • SPI 将服务接口和具体的服务实现分离开来,将服务调用方和服务实现者解耦,能够提升程序的扩展性、可维护性。修改或者替换服务实现并不需要修改调用方。
  • 很多框架都使用了 Java 的 SPI 机制,比如:Spring 框架、数据库加载驱动、日志接口、以及 Dubbo 的扩展实现等等。

2、SPI和API有什么区别?

  • 广义来说,它们都属于接口
    在这里插入图片描述一般模块之间都是通过接口进行通讯,那我们在服务调用方和服务实现方(也称服务提供者)之间引入一个“接口”。
  • 简单来说,如果接口和实现都是由实现方(服务提供者)提供的,那就是API
  • 接口是由调用方设计,然后实现方根据这个规则对接口进行实现,并提供服务,就是SPI。

3、使用SPI机制的原因?

  • 解耦:SPI机制将接口定义与实现分离,使得框架和库可以独立于其实现进行开发和演化。
  • 灵活性:允许在运行时动态加载和替换服务实现,而不需要修改代码。这对插件系统和扩展性要求高的应用程序特别有用。
  • 模块化设计:SPI机制支持模块化设计,使得不同的模块可以提供不同的实现,满足不同的需求。

4、SPI机制的优缺点?

优点:

  • 动态发现和加载:允许在运行时动态发现和加载服务实现,无需修改应用程序代码。
  • 高扩展性:支持插件机制,方便第三方扩展和增强现有功能。
  • 解耦合:降低接口定义和实现之间的耦合度,增强代码的可维护性和可读性。

缺点:

  • 性能开销:动态加载服务实现可能带来性能开销,尤其是在服务实现较多时。
  • 配置复杂性:需要在 META-INF/services 目录中进行配置,增加了部署和维护的复杂性。
  • 调试困难:动态加载和发现机制可能使得调试变得更加复杂,因为服务实现的发现和加载是在运行时进行的。

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

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

相关文章

Arduino library for proteus 下载 安装 测试

Arduino library include: https://drive.google.com/uc?exportdownload&id1P4VtXaomJ4lwcGJOZwR_25oeon9Zzvwb 第一步: 也可从我的共享网盘当中下载: 第2步:解压文件: 第3步: copy lib and idx 到对应的…

java宠物商城网站系统的设计与实现

springboot508基于Springboot宠物商城网站系统 题目:宠物商城网站系统的设计与实现 摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往…

PHP一站式班级解决方案班级管家系统小程序源码

一站式班级解决方案 —— 班级管家系统 🎓【开篇:班级管理的烦恼,你中招了吗?】🎓 作为班主任或班级管理者,你是否经常为繁琐的班级事务而头疼?从日常通知的发布到作业的收集,从班…

TOGAF之架构标准规范-架构愿景

TOGAF标准规范中,架构愿景阶段的主要工作包括定义企业架构的范围、确认企业架构的利益相关者、创建企业架构愿景、获得利益相关者的批准。 如上所示,架构愿景(Architecture Vision)在TOGAF标准规范中处于A阶段 如上所示&#xff0…

SpringBoot学习(4)(yml配置信息书写和获取)(SpringEL表达式语言)

目录 1、yml配置信息的书写和获取介绍 2、案例学习 (1)配置信息的书写注意事项 (2)配置信息的获取 (3)注解Value (4)相同层级的共同前缀,可以使用下面这个注解 3、…

Great Wall长城工作站安装银河麒麟V10(SP1)-ARM版桌面操作系统

长城工作站安装银河麒麟V10(SP1)桌面操作系统 1. 硬件信息 [1]. Great Wall 长城台式微型计算机 产品型号:世恒TD120A2 型号代码:世恒TD120A2-019 电源:220V~3A 50Hz [2]. 芯片型号 架构: aarch64 CPU 运行模式&#xff1a…

DeepFM算法代码

以下代码均采用Tensorflow1.15版本 数据集私聊我 import tensorflow as tf import numpy as np import pandas as pd# 定义特征列 def get_feature_columns():# 假设 Criteo 数据集有 10 个数值特征和 10 个类别特征numerical_feature_columns [tf.feature_column.numeric_c…

2024.9.3 作业

自己实现栈和队列 代码&#xff1a; /*******************************************/ 文件名&#xff1a;sq.h /*******************************************/ #ifndef SQ_H #define SQ_H #include <iostream> #include<cstring>using namespace std; class …

秋招突击——算法练习——8/26——图论——200-岛屿数量、994-腐烂的橘子、207-课程表、208-实现Trie

文章目录 引言正文200-岛屿数量个人实现 994、腐烂的橘子个人实现参考实现 207、课程表个人实现参考实现 208、实现Trie前缀树个人实现参考实现 总结 引言 正文 200-岛屿数量 题目链接 个人实现 我靠&#xff0c;这道题居然是腾讯一面的类似题&#xff0c;那道题是计算最…

[数据集][目标检测]智慧牧场猪只检测数据集VOC+YOLO格式16245张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;16245 标注数量(xml文件个数)&#xff1a;16245 标注数量(txt文件个数)&#xff1a;16245 标…

力扣SQL仅数据库(175~185)

175. 组合两个表 题目&#xff1a;编写解决方案&#xff0c;报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中&#xff0c;则报告为 null 准备数据&#xff1a; Create table If Not Exists Person (personId int, firstName varchar(255…

vue使用html2Canvas导出图片 input文字向上偏移

vue使用html2Canvas导出图片 input文字向上偏移 图中 用的是element的输入框 行高 32px,经常测试 你使用原生的input 还是会出现偏移。 解决方法&#xff1a;修改css样式 1.怎么实现导出 网上随便找很多 2.在第一步 获取你要导出的元素id 克隆后 修改他的样式或者 你直接在你需…

设计模式 19 观察者模式

设计模式 19 创建型模式&#xff08;5&#xff09;&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式&#xff08;7&#xff09;&#xff1a;适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff…

十二、建立自已的北斗卫星实时定位基站

一、背景 连续运行卫星定位服务系统(Continuous Operational Reference System,简称CORS系统)是现代北斗/GNSS的发展热点之一。CORS系统将网络化概念引入到了大地测量应用中,该系统的建立不仅为测绘行业带来深刻的变革,而且也将为现代网络社会中的空间信息服务带来新的思维…

基于单片机的水箱水质监测系统设计

本设计基于STM32F103C8T6为核心控制器设计了水质监测系统&#xff0c;选用DS18B20温度传感器对水箱水体温度进行采集&#xff1b;E-201-C PH传感器获取水体PH值&#xff1b;选用TS-300B浊度传感器检测水体浊度&#xff1b;采用YW01液位传感器获取水位&#xff0c;当检测水位低于…

宽带和带宽分不清楚

如何理解带宽 我们平时经常听到的带宽其实是宽带&#xff0c;举个栗子&#xff1a;我家用的是xx运营商提供的&#xff0c;号称1000M宽带&#xff0c;这其实指是的网络数据传输的速率是&#xff1a;1000Mbs&#xff08;即125MBps&#xff09;。 那么既然有宽带&#xff0c;就有…

【LVGL- 组 lv_group_t】

lv_group_t ■ group■ 组api■ lv_group_create后后面的控件自动添加到group ■ group if (code LV_EVENT_SCREEN_LOADED) //一般放在loaded 事件中添加到lv_group_set_default(key_group); lv_indev_set_group(indev_keypad, key_group); //和输入设备关联。 }■ 组api…

MCU官方IDE软件安装及学习教程集合 — STM32CubeIDE(STM32)

简介 各MCU厂商为保证产品的市场地位以及用户体验&#xff0c;不断的完善自己的产品配套&#xff0c;搭建自己的开发生态&#xff0c;像国外ST公司&#xff0c;国内的GD&#xff08;兆易创新&#xff09;&#xff0c;AT&#xff08;雅特力&#xff09;等等。目前就开发生态而言…

09.定时器02

#include "reg52.h"sbit led P3^6;void delay10ms() { //1. 配置定时器0工作模式位16位计时TMOD 0x01;//2. 给初值&#xff0c;定一个10ms出来TL00x00;TH00xDC;//3. 开始计时TR0 1;TF0 0; } void main() {int cnt 0;led 1;while(1){if(TF0 1)//当爆表的时候&a…

【Qt】QLCDNumber | QProgressBar | QCalendarWidget

文章目录 QLCDNumber —— 显示数字QLCDNumber 的属性QLCDNumber 的使用 QProgressBar —— 进度条QProgressBar 的属性创建一个进度条修改为 红色的进度条 QCalendarWidget —— 日历QCalendarWidget 的属性QCalendarWidget 的使用 QLCDNumber —— 显示数字 QLCDNumber 的属…