百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

「Java面试」Java SPI是什么?有什么用?

moboyou 2025-03-23 18:55 9 浏览

“Java SPI是什么?有什么用?”

这是阿里p6面试过程中,第二面的时候遇到的一个真实的问题。

如果你不理解SPI,建议你看完整篇文章。

大家好,我是Mic,一个工作了14年的Java程序员

这道面试题的文字版,我已经整理在20万字的文档里了,有需要的可以后台私信我发送【Mic】领取。

下面来看看这个问题考察的目的

考察目标

这道题考察难度偏中等,对于没怎么去研究过源码的同学来说,SPI是非常陌生的概念

考察人群主要还是3到5年比较多。

3~5年属于中高端Java开发人群,因此考察目的也很明显:

  • 了解求职者对于技术领域的理解程度
  • 实现高级开发的人才选拔

Java这个行业没有人才评级标准,所以在面试的时候,面试官也比较难去界定你的职级。

所以在互联网企业,技术面的考察会比较深。

所以,要想回答好这个问题,还是要有一些自己的见解。

问题解析

Java SPI,全称是Service Provider Interface。

它是一种基于接口的动态扩展机制,相当于Java里面提供了一套接口。

然后第三方可以实现这个接口来完成功能的扩展和实现。

举个简单的例子。

在Java的SDK里面,提供了一个数据库驱动的接口java.sql.Driver。

它的作用是提供数据库的访问能力。

不过,在Java里面并没有提供实现,因为不同的数据库厂商,会有不同的语法和实现。

所以只能由第三方数据库厂商来实现,比如Oracle是oracle.jdbc.OracleDriver,mysql是com.mysql.jdbc.Driver.

然后在应用开发的时候,根据集成的驱动实现连接到对应数据库。

Java中SPI机制主要思想是将装配的控制权移到程序之外实现标准和实现的解耦,以及提供动态可插拔的能力,在模块化的设立中,这种思想非常重要。

实现Java SPI,需要满足几个基本的格式:

  • 需要先定义一个接口,作为扩展的标准
  • 在classpath目录下创建META-INF/service文件目录
  • 在这个目录下,以接口的全限定名命名的配置文件, 文件内容是这个接口的实现类
  • 在应用程序里面,使用ServiceLoad,就可以根据接口名称找到classpath所有的扩展时间

然后根据上下文场景选择实现类完成功能的调用。

Java SPI有一定的不足之处,比如,不能根据需求去加载扩展实现,每次都会加载扩展接口的所有实现类并进行实例化,

实例化会造成性能开销,并且加载一些不需要用到的实现类,会导致内存资源的浪费,

好了,下面看看高手的回答。

高手回答

Java SPI是Java里面提供的一种接口扩展机制。

它的作用我认为有两个:

  • 把标准定义和接口实现分离,在模块化开发中很好的实现了解耦
  • 实现功能的扩展,更好的满足定制化的需求

除了Java的SPI以外,基于SPI思想的扩展实现还有很多,比如Spring里面的SpringFactoriesLoader。

Dubbo里面的ExtensionLoader,并且Dubbo还在SPI基础上做了更进一步优化,

提供了激活扩展点、自适应扩展点。


总结

大家知道怎么回答了吗?

如果你喜欢我的作品,记得点赞收藏加关注哦,

需要高手面试文档合集(附赠大厂内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以后台私信【Mic】或者评论区留言。

相关推荐

电子EI会议!投稿进度查

今天为大家推荐一个高性价比的电子类EI会议——IEEE电子与通信工程国际会议(ICECE2024)会议号:IEEE#62199截稿时间:2024年3月25日召开时间与地点:2024年8月15...

最“稳重”的滤波算法-中位值滤波算法的思想原理及C代码实现

在信号处理和图像处理领域,滤波算法是一类用于去除噪声、平滑信号或提取特定特征的关键技术。中位值滤波算法是一种常用的非线性滤波方法,它通过取一组数据的中位值来有效减小噪声,保留信号的有用特征,所以是最稳...

实际工程项目中是怎么用卡尔曼滤波的?

就是直接使用呀!个人认为,卡尔曼滤波有三个个关键点,一个是测量,一个是预测,一个是加权测量:通过传感器,获取传感器数据即可!预测:基于模型来进行数据预测;那么问题来了,如何建模?有难有易。加权:主要就...

我拿导弹公式算桃花,结果把自己炸成了烟花

第一章:学术圈混成“顶流”,全靠学生们把我写成段子最近总有人问我:“老师,您研究导弹飞行轨迹二十年,咋还顺带研究起月老红绳的抛物线了?”我扶了扶眼镜,深沉答道:“同志,导弹和爱情的本质都是动力学问题—...

如何更好地理解神经网络的正向传播?我们需要从「矩阵乘法」入手

图:pixabay原文来源:medium作者:MattRoss「机器人圈」编译:嗯~阿童木呀、多啦A亮介绍我为什么要写这篇文章呢?主要是因为我在构建神经网络的过程中遇到了一个令人沮丧的bug,最终迫...

电力系统EI会议·权威期刊推荐!

高录用率EI会议推荐:ICPSG2025(会议号:CFP25J66-PWR)截稿时间:2025年3月15日召开时间与地点:2025年8月18-20日·新加坡论文集上线:会后3个月内提交至S...

EI论文写作全流程指南

推荐期刊《AppliedEnergy》是新能源领域权威EI/SCI双检索期刊,专注能源创新技术应用。刊号:ISSN0306-2619|CN11-2107/TK影响因子:11.2(最新数...

JMSE投稿遇坑 实验结果被推翻

期刊基础信息刊号:ISSN2077-1312全称:JournalofMarineScienceandEngineering影响因子:3.7(最新JCR数据)分区:中科院3区JCRQ2(...

斩获国际特等奖!兰理工数学建模团队为百年校庆献礼

近日,2019年美国大学生数学建模竞赛(MCM-ICM)成绩正式公布。兰州理工大学数学建模团队再创佳绩,分别获得国际特等奖(OutstandingWinner)1项、一等奖(Meritorious...

省气象台开展人员大培训岗位大练兵学习活动

5月9日,省气象台组织开展首次基于Matlab编程语言的数值模式解释应用培训,为促进研究性业务发展,积极开展“人员大培训、岗位大练兵”学习活动起到了积极作用。此次培训基于实际业务需求,着眼高原天气特色...

嵌入式软件培训

培训效果:通过系统性的培训学习,理论与实践相结合,可以胜任相关方向的开发工作。承诺:七大块专业培训,可以任意选择其中感兴趣的内容进行针对性地学习,每期培训2个月,当期没学会,可免费学习一期。本培训内容...

轧机支承辊用重载中低速圆柱滚子轴承滚子修形探讨

摘 要:探讨了轧机支承辊用重载中低速圆柱滚子轴承滚子修形的理论和方法,确定关键自变量。使用Romax软件在特定载荷工况条件下对轴承进行数值模拟分析,确定关键量的取值范围。关键词:轧机;圆柱滚子轴承;滚...

数学建模EI刊,如何避雷?

---权威EI会议推荐会议名称:国际应用数学与工程建模大会(ICAMEM)截稿时间:2025年4月20日召开时间/地点:2025年8月15日-17日·新加坡论文集上线:会后2个月内由Sp...

制造工艺误差,三维共轭齿面怎样影响,双圆弧驱动的性能?

文/扶苏秘史编辑/扶苏秘史在现代工程领域,高效、精确的传动系统对于机械装置的性能和可靠性至关重要,谐波传动作为一种创新的机械传动方式,以其独特的特性在精密机械领域引起了广泛关注。在谐波传动的进一步优化...

测绘EI会议——超详细解析

【推荐会议】会议名称:国际测绘与地理信息工程大会(ICGGE)会议编号:71035截稿时间:2025年3月20日召开时间/地点:2025年8月15-17日·德国慕尼黑论文集上线:会后2个...