自定义spi
接口类
public interface IMyServiceLoader {
String sayHello();
String getName();
}
实现类:
public class MyServiceLoaderImpl1 implements IMyServiceLoader {
@Override
public String sayHello() {
return "hello1";
}
@Override
public String getName() {
return "name1";
}
}
public class MyServiceLoaderImpl2 implements IMyServiceLoader {
@Override
public String sayHello() {
return "hello2";
}
@Override
public String getName() {
return "name2";
}
}
测试类
public class TestMyServiceLoader {
public static void main(String[] argus){
ServiceLoader<IMyServiceLoader> serviceLoader = ServiceLoader.load(IMyServiceLoader.class);
for (IMyServiceLoader myServiceLoader : serviceLoader){
System.out.println(myServiceLoader.getName() + myServiceLoader.sayHello());
}
}
}
注意:
自定义spi使用到的是java.util.ServiceLoader,该类加载接口实现类的子方法但在加载前需将实现类的全路径放在资源文件路径下的 META-INF/services/IMyServiceLoader (接口名)文件中 然后将实现类的全路径名称写入该txt文件 com.w.IMyServiceLoader