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的思想确实很有价值,在实际业务开发中,可以利用这样的思想
在不修改核心代码的情况下,提供功能的增强和扩展。
喜欢我的作品的朋友,记得点赞收藏加关注
需要高手面试文档(附赠大厂内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以扫描下方二维码
↓↓↓↓↓↓↓↓↓↓↓↓↓↓