Service Provider Interface

通过在ClassPath下的META-INF/services文件夹查找文件,自动加载文件里所定义的类
在Dubbo、JDBC中都使用到了SPI机制

Pasted%20image%2020240117160544

package tmp.SPI;

import sun.misc.Service;

import java.util.Iterator;
import java.util.ServiceLoader;

public class Test {
public static void main(String[] args) {

Iterator<SPIService> providers = Service.providers(SPIService.class);
ServiceLoader<SPIService> load = ServiceLoader.load(SPIService.class);

while(providers.hasNext()) {
SPIService ser = providers.next();
ser.execute();
}
System.out.println("--------------------------------");
Iterator<SPIService> iterator = load.iterator();
while(iterator.hasNext()) {
SPIService ser = iterator.next();
ser.execute();
}
}
}

比较一下吧
修改那个接口类定义文件里包含恶意类