【Java面试】什么是SPI,它有什么用?

Hi,大家好,我是Mic

一个工作了4年的粉丝,私信了一个问题。

我看到问题的时候有点惊讶,很多主流框架都用到了这个机制

你竟然不知道?

看来你是凭实力那低薪!

这个问题是:“什么是SPI,它有什么用”

下面看看普通人和高手对这个问题的回答。

需要高手面试文档(附赠大厂内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以扫描下方二维码

普通人:

SPI我记得好像在那个Dubbo里面有用到,就是说它可以去实现这种就是功能的扩展嘛。

我记得在Dubbo里面就是说,它里面有一些什么负载均衡的策略嘛。如果说我觉得它里面负载策略不够的话或者它的策略没达到我的需求的话,我是可以用SPI这样一个方式去扩展,它的那个负载的一个策略的。

高手:

好的

SPI全称是Service Provider Interface ,它是JDK内置的一种动态扩展点的实现。

简单来说,就是我们可以定义一个标准的接口,然后第三方的库里面可以实现这个接口。

那么,程序在运行的时候,会根据配置信息动态加载第三方实现的类,从而完成功能的动态扩展机制。

在Java里面,SPI机制有一个非常典型的实现案例,就是数据库驱动java.jdbc.Driver

JDK里面定义了数据库驱动类Driver,它是一个接口,JDK并没有提供实现。

具体的实现是由第三方数据库厂商来完成的。

在程序运行的时候,会根据我们声明的驱动类型,来动态加载对应的扩展实现,从而完成数据库的连接。

除此之外,在很多开源框架里面都借鉴了Java SPI的思想,提供了自己的SPI框架,比如

Dubbo定义了ExtensionLoader,实现功能的扩展。

Spring提供了SpringFactoriesLoader,实现外部功能的集成。

以上就是我对这个问题的理解!

总结

SPI的思想确实很有价值,在实际业务开发中,可以利用这样的思想

在不修改核心代码的情况下,提供功能的增强和扩展。

喜欢我的作品的朋友,记得点赞收藏加关注

​​​​​需要高手面试文档(附赠大厂内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以扫描下方二维码

↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟着Mic学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值