Java SPI定义
Java SPI,全称Service Provider Interface的简写,翻译成中文就是服务提供发现接口,是Java提供的一套用来被第三方实现或者扩展的API。
Java SPI作用
Java SPI是JDK内置的一种服务提供发现机制,Java SPI是被用来设计给服务提供商做插件使用。
Java提供的一套用来被第三方实现或扩展的接口,实现了接口的动态扩展,让第三方的实现类能像插件一样嵌入到系统中,主要是被框架的开发人员使用。
Java SPI实现机制
Java SPI整体机制图如下:
Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。
在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。
一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码,为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。
Java SPI就是提供这样的一个机制:Java中SPI机制主要思想是将装配的控制权移到程序之外,有点类似Spring IOC机制。
Java SPI就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,所以SPI的核心实现思想就是解耦。
Java SPI使用场景
Java SPI比较常见的例子:
- 数据库驱动加载接口实现类的加载;
- JDBC加载不同类型数据库的驱动;
- 日志门面接口实现类加载,SLF4J加载不同提供商的日志实现类;
- Spring中大量使用了SPI,比如:自动类型转换Type Conversion SPI(Converter SPI、Formatter SPI)等;
- 、Dubbo中也大量使用SPI的方式实现框架的扩展, 不过它对Java提供的原生SPI做了封装,允许用户扩展实现Filter接口。
Java SPI整体比较适用于:调用者根据实际使用需要:启用、扩展、或者替换框架的实现策略的使用场景。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》