java的spi机制示例
java的SPI(Service Provider Interface)机制,通过线程上下文类加载器打破类加载的双亲委派模型,达到动态加载外部实现的目的.
是一个非常优秀的设计,我这里写个简单示例体验一下.
需要注意的是:不可以使用内部类接口、内部类实现.
示例代码
public static void main(String[] args) {
ServiceLoader tSPIInterLoader = ServiceLoader.load(SPIInter.class);
for (SPIInter tSPIInter : tSPIInterLoader) {
tSPIInter.method1();
System.out.println(tSPIInter.method2("test SPI"));
}
}
public interface SPIInter {
void method1();
String method2(String param1);
}
public class Inter1Imp1 implements SPIInter {
public void method1() {
System.out.println("method1 Impl 1");
}
public String method2(String param1) {
return param1 + "method2 Impl 1";
}
}
public class Inter1Imp2 implements SPIInter {
public void method1() {
System.out.println("method1 Impl 2");
}
public String method2(String param1) {
return param1 + "method2 Impl 2";
}
}
META-INF/services/module.SPIInter
module.Inter1Imp1
module.Inter1Imp2
}
输出
method1 Impl 1
test SPImethod2 Impl 1
method1 Impl 2
test SPImethod2 Impl 2