Hello大家好,我是小奕,一个工作了五年的阿里程序员,欢迎评论底下留言加粉丝群,我会拉你们加入粉丝群,觉得看的不错想了解更多这样的短文,也请大家多多关注这个我主页动态其他帖子。

如果你是第一次听到这个名词,那么不好意思,你是凭实力拿低薪的同学!为时不晚,赶紧卷起来。​之前面试包括工作几年同学面试这个问题,我有点惊讶,现在很多主流框架都用到这一个机制,竟然不知道。这个问题是什么是SPI,它有什么作用?下面我们来看看普通人和老司机对于这个问题的一个回答。
普通人的回答:SPI我记得好像在那个Dubbo里面有用到。就说它可以去实现这种就是功能的扩展嘛,我记得因为在double里面就是说有一些什么负载均衡的策略嘛,我如果说我觉得他里面自带策略不够的话,或者他的策略没达到我的需求的话,我是可以用SPI这样的方式去扩展。

老司机的回答:SPI的全称呢,是service provider interface,它是jdk里面内置的一种动态扩展的一个实现,简单来说我们可以定一个标准的接口,然后第三方库里面可以去实现这个接口。那么我们程序在运行的时候呢,会根据配置信息动态加载第三方的一个实现,从而去完成功能的一个动态扩展机制。我们知道在Java里面,SPI的机制非常典型的一个实现案例,就是数据库的一个驱动。java.jdbc.driver。jdk里面定义的数据库的一个驱动类叫Driver,它是一个接口,而JDK里面并没有提供这个Driver的一个实现,具体的实现是由第三方的数据库厂商来完成的。在程序运行的时候,会根据我们生命的驱动类型来动态去加载对应的一个扩展实现,从而去完成数据库的一个连接动作。除此以外,在很多开源扩展里面都有借鉴Java spi的一个思想,去提供自己的一个SPI的一个框架,比如说double里面定义了一个extension loader,它实现一个动态扩展的功能,在spring里面呢,提供了一个spring factory loader去实现外部功能的一个集成。

SPI的思想确实很有价值,在实际业务开发里面我们可以利用这样的一个思想,在不修改核心代码的情况下去提供功能的增强和扩展。
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务