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
时,文件名及目录格式应如下表示:
相应的文件内容如下:
com.mysql.cj.jdbc.Driver
使用场景
SPI机制在实际开发中使用得场景也有很多。特别是统一标准的不同厂商实现,当有关组织或者公司定义标准之后,具体厂商或者框架开发者实现,之后提供给开发者使用。
网友评论