注:该源码分析对应JDK版本为1.8
这是【源码笔记】的JDK源码解读的第一篇文章,本篇我们来探究Java的SPI机制的相关源码。
那么,什么是SPI机制呢?
SPI是Service Provider Interface 的简称,即服务提供者接口的意思。
根据字面意思我们可能还有点困惑,SPI说白了就是一种扩展机制,我们在相应配置文件中定义好某个接口的实现类,然后再根据这个接口去这个配置文件中加载这个实例类并实例化,其实SPI就是这么一个东西。
说到SPI机制,我们最常见的就是Java的SPI机制,此外,还有Dubbo和SpringBoot自定义的SPI机制。
有了SPI机制,那么就为一些框架的灵活扩展提供了可能,而不必将框架的一些实现类写死在代码里面。
那么,某些框架是如何利用SPI机制来做到灵活扩展的呢?下面举几个栗子来阐述下:
spring.factories
中加上我们自定义的自动配置类,事件监听器或初始化器等;上面的三个栗子先让我们直观感受下某些框架利用SPI机制是如何做到灵活扩展的。
我们先来看看如何使用Java自带的SPI。先定义一个Developer
接口
// Developer.javapackage com.ymbj.spi;public interface Developer { void sayHi();}
再定义两个Developer
接口的两个实现类: