SPI (Service Provider Interface) 是一種服務發現機制。它通過在ClassPath路徑下的META-INF/services文件夾查找文件,自動加載文件裏所定義的類。
package com.michael.service;
public interface GoodsService {
void print();
}
package com.michael.service.impl;
import com.michael.service.GoodsService;
public class GoodsServiceImplA implements GoodsService {
@Override
public void print() {
System.out.println("GoodsServiceImplA");
}
}
package com.michael.service.impl;
import com.michael.service.GoodsService;
public class GoodsServiceImplB implements GoodsService {
@Override
public void print() {
System.out.println("GoodsServiceImplB");
}
}
在classpath下創建META-INF/services/com.michael.service.GoodsService文件添加如下內容:
com.michael.service.impl.GoodsServiceImplA
com.michael.service.impl.GoodsServiceImplB
package com.michael;
import java.util.Iterator;
import java.util.ServiceLoader;
import com.michael.service.GoodsService;
public class App {
public static void main(String[] args) {
ServiceLoader<GoodsService> load = ServiceLoader.load(GoodsService.class);
Iterator<GoodsService> iterator = load.iterator();
while (iterator.hasNext()) {
GoodsService next = iterator.next();
next.print();
}
}
}
運行結果:
GoodsServiceImplA
GoodsServiceImplB