Java SPI机制详解(作用原理及使用场景)

Java SPI机制详解(作用原理及使用场景)-mikechen

Java SPI定义

Java SPI,全称Service Provider Interface的简写,翻译成中文就是服务提供发现接口,是Java提供的一套用来被第三方实现或者扩展的API。

 

Java SPI作用

Java SPI是JDK内置的一种服务提供发现机制,Java SPI是被用来设计给服务提供商做插件使用。

Java提供的一套用来被第三方实现或扩展的接口,实现了接口的动态扩展,让第三方的实现类能像插件一样嵌入到系统中,主要是被框架的开发人员使用。

 

Java SPI实现机制

Java SPI整体机制图如下:

Java SPI机制详解(作用原理及使用场景)-mikechen

Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。

在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。

一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码,为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。

Java SPI就是提供这样的一个机制:Java中SPI机制主要思想是将装配的控制权移到程序之外,有点类似Spring IOC机制。

Java SPI就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,所以SPI的核心实现思想就是解耦。

 

Java SPI使用场景

Java SPI比较常见的例子:

  1. 数据库驱动加载接口实现类的加载;
  2. JDBC加载不同类型数据库的驱动;
  3. 日志门面接口实现类加载,SLF4J加载不同提供商的日志实现类;
  4. Spring中大量使用了SPI,比如:自动类型转换Type Conversion SPI(Converter SPI、Formatter SPI)等;
  5. 、Dubbo中也大量使用SPI的方式实现框架的扩展, 不过它对Java提供的原生SPI做了封装,允许用户扩展实现Filter接口。

Java SPI整体比较适用于:调用者根据实际使用需要:启用、扩展、或者替换框架的实现策略的使用场景。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法