Service Provider Interface
通过在ClassPath下的META-INF/services文件夹查找文件,自动加载文件里所定义的类
在Dubbo、JDBC中都使用到了SPI机制
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(); } } }
|
比较一下吧
修改那个接口类定义文件里包含恶意类