Dubbo中在很多地方都用到了java SPI(Service Provider Interface)技术,如容器选择、协议适配等(阿里对这项技术扩展了一些自己的功能,后面读代码时会讲到)。 所谓SPI就是一个简单的服务提供加载工具,即:java.util.ServiceLoader,主要用法可以简单的表述为,通常定义一个简单的服务接口,但是实现这个服务的接口实现类有很多种,ServiceLoader能够自动加载实现类,通过读ServiceLoader的源码,我们能够发现ServiceLoader 会主动加载放在资源目录META-INF/services下的以接口全路径命名文件中所记载的实现类 如何使用参考下面简单例子: 服务接口类 public interface LogPrintln { public String printLn(); } 服务接口实现类public class LogPrintlnLog4j implements LogPrintln { public String printLn() { return "Log4j"; } } 文件路径:META-INF/services/blog.csdn.net.spi.LogPrintLn内容:blog.csdn.net.spi.LogPrintlnLog4j测试结果:public class TestMain { public static void main(String[] args) { ServiceLoader<LogPrintln> serviceLoader = ServiceLoader .load(LogPrintln.class); for (LogPrintln service : serviceLoader) { System.out.println(service.printLn()); } } }输出结果:Log4j