SPI机制

SPI 全称为 (Service Provider Interface) ,是JDK内置的一种接口实现自动发现机制。

作用

动态的为接口加载实现。

举例

数据库驱动加载:java.sql.Driver
Servlet 3.0:ServletContainerInitializer

java中SPI机制的实现

java中通过 ServiceLoader来实现SPI机制,例如,数据库驱动加载DriverManager类中使用ServiceLoader来加载数据库驱动。

ServletContainerInitializer使用的是ServiceLoader变体WebappServiceLoader来实现SPI机制,详情请查看ContextConfig,其实原理都一样。

SPI配置

当我们写完实现后,这时SPI还不能使用,还需要进行简单的配置。

SPI默认会去加载META-INF/services/文件夹下的文件:文件名的格式必须是接口的全限定名。例如,当我们加载java.sql.Driver的实现com.mysql.cj.jdbc.Driver时,文件名及目录格式应如下表示:

SPI机制_第1张图片
com.mysql.cj.jdbc.Driver.png

相应的文件内容如下:

com.mysql.cj.jdbc.Driver

使用场景

SPI机制在实际开发中使用得场景也有很多。特别是统一标准的不同厂商实现,当有关组织或者公司定义标准之后,具体厂商或者框架开发者实现,之后提供给开发者使用。

你可能感兴趣的:(SPI机制)