参考文章:https://blog.51cto.com/u_13423706/5818612
SPI
概念
为某个接口寻找其实现类的机制 可以用于扩展
实现三板斧
一. 接口与实现
- Phone接口
/**
* Phone接口
*/
public interface Phone {
// 打电话
public void call();
}
- AndroidPhone实现类
public class AndroidPhone implements Phone {
@Override
public void call() {
System.out.println("Android Phone call.........");
}
}
- IosPhone实现类
public class IosPhone implements Phone {
@Override
public void call() {
System.out.println("Ios Phone call........");
}
}
二.配置文件
在java或resource下创建META-INF.services文件夹(规定) 创建 以接口位置为名,内容为实现类的文件
com.bjpowernode.spi.impl.AndroidPhone
com.bjpowernode.spi.impl.IosPhone
三.ServiceLoader加载
public class Test {
public static void main(String[] args) {
ServiceLoader<Phone> serviceLoader = ServiceLoader.load(Phone.class);
serviceLoader.forEach((Phone phone)->{
if(phone instanceof DefaultPhone){
phone.call();
}
if(phone instanceof AndroidPhone){
phone.call();
}
if(phone instanceof IosPhone){
phone.call();
}
});
}
}
踩坑 注意对应的文件名