SPI 简介
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,
而后,把新加的实现,描述给JDK知道就行啦(通过改一个文本文件即可) 公司内部,目前Dubbo框架就基于SPI机制提供扩展功能。
SPI实例
1、定义一个接口
public interface HelloInterface {
void sayHello();
}
2、实现接口
public class TextHello implements HelloInterface {
@Override
public void sayHello() {
System.out.println("Text hello");
}
}
public class ImageHello implements HelloInterface {
@Override
public void sayHello() {
System.out.println("Image hello");
}
}
3、在classpath下增加配置文件,目录如下
文件中为实现类
com.justin.practice.spi.ImageHello
com.justin.practice.spi.TextHello
4、测试类
public static void main(String[] args) {
ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);
for (HelloInterface loader : loaders) {
loader.sayHello();
}
}
输出
Image hello
Text hello
JDBC中的SPI实现
DriverManger加载时候会调用如下方法java.sql.DriverManager#loadInitialDrivers