一、SPI的全名为Service Provider Interface,是JDK内置的一种机制,是一种动态服务发现的机制。
基本思路是ServiceLoader负责读取写死路径下的配置然后将其中的类加载进行执行,当然这种服务面对的是接口层次。
基本代码层次如下:
core.spi.HelloInterface 内容:
core.impl.LiMingHello core.impl.WangChaoHello
Main 函数:
package core; import java.util.ServiceLoader; import core.spi.HelloInterface; /** * SPI 服务 * */ public class SPIMain { public static void main(String[] args) throws InterruptedException { while (true) { ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class); for (HelloInterface in : loaders) { in.sayHello(); } Thread.sleep(2000); } } }
其中有个死循环是为了测试其动态性,当其中删除一行实现只会输出其中一个实现类,说明其中实现类是动态加载。其中真正的使用场景可以参看dubblo源码。