读懂Dubbo源码必备知识点之二

来源:互联网 发布:asp.net加权轮询算法 编辑:程序博客网 时间:2024/05/29 06:40
    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