Dubbo Extension机制
SPI Service Provider Interface 是JDK内置的一种服务提供发现功能,一种动态替换发现的机制。
想要在运行时动态地给一个接口添加实现,只需要添加一个实现即可。
项目的结构如下图所示:
1、接口类是HelloInterface,两个实现类分别是ImageHello 和 TextHello
2、在META-INF目录下建立扩展文件,以接口HelloInterface 全路径名命名
接口Interface:
package com.spiexample;
public interface HelloInterface {
public void sayHello();
}
两个实现类ImageHello和TextHello的代码如下
package com.spiexample.impl;
import com.spiexample.HelloInterface;
public class ImageHello implements HelloInterface {
public void sayHello() {
System.out.println("Image hello!");
}
}
package com.spiexample.impl;
import com.spiexample.HelloInterface;
public class TextHello implements HelloInterface {
public void sayHello() {
System.out.println("Text Hello!");
}
}
在META-INF/services/下的com.spiexample.HelloInterface文件内容如下
com.spiexample.impl.ImageHello com.spiexample.impl.TextHello
最后通过SPIMain对象测试整个过程是否正确:
package com.spiexample;
import java.util.ServiceLoader;
public class SPIMain {
public static void main(String[] args){
ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);
if(loaders!=null){
for(HelloInterface helloInterface:loaders){
helloInterface.sayHello();
}
}
}
}
输出的结果如下图所示:
Image hello!
Text Hello!
Process finished with exit code 0