SPI机制到底是什么?中间件又是如何使用的?
Posted 码农补给点
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPI机制到底是什么?中间件又是如何使用的?相关的知识,希望对你有一定的参考价值。
1介绍
SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services/接口全限定名,自动加载文件里所定义的类。这种机制便于扩展,例如Springboot,Dubbo,mysql中都用到了
1.1源码中的例子
如mysql的驱动包就是使用了Java原生SPI机制,JDBC定义了连接数据库的规范,mysql根据规范提供自己的驱动包mysql-connector-java.jar去获取连接,在DriverManager中会通过SPI加载不同数据库厂商提供的实现。
1.2图示
2java-spi
2.1使用
Java的SPI如何使用呢?在ClassPath路径下的META-INF/services文件夹下定义一个文件,文件名同接口名,内容则是接口的实现。直接上代码。
/**
* @author :db
* @date :Created in 2021/4/22
* @version: V1.0
* @slogan: 有道无术止于术
* 更多资料,分享请微信关注 程序员补给站
**/
public class MainClass {
/**
* 1 ClassPath 下面加META-INF.serviecs 文件夹
* 2 文件夹下创建一个以全类名为文件名的文件。里面写一个实现类的全类名
*
* @param args
*/
public static void main(String[] args) {
/**
* 会把所有类都加载进来,无法按需读取
*/
Iterator<Apple> providers = Service.providers(Apple.class);
ServiceLoader<Apple> load = ServiceLoader.load(Apple.class);
load.forEach(s-> System.out.println(s.getName()));
System.out.println("--------------分割线------------------");
while(providers.hasNext()) {
Apple ser = providers.next();
System.out.println(ser.getName());
}
}
}
以上是关于SPI机制到底是什么?中间件又是如何使用的?的主要内容,如果未能解决你的问题,请参考以下文章