目录
一、概述
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来对框架扩展和组件的替换,实现服务接口可插拔,通过配置文件进行动态配置。许多框架中使用到了SPI机制,例如日志log4j,xml解析工厂,FileSystem文件系统,dubbo等。
二、JDK ServiceLoader
jdk自带的ServiceLoader会在META/services目录下找到接口的全类名的文件,并根据文件里面的接口具体实现名进行加载,完成类的加载,模块的注入。
ServiceLoader.load方法,创建一个ServiceLoader实体类
private static final String PREFIX = "META-INF/services/";
// 接口class
private final Class<S> service;
// 类加载器
private final ClassLoader loader;
// 权限控制
private final AccessControlContext acc;
// 缓存provider,并且保持配置的顺序
private L