ServiceLoader SPI的简单认知

写了这么长时间的代码,竟然没有用过jdk SPI的ServiceLoader,深表遗憾!

为什么写这个,因为在看Sentinel配置代码的时候,看到了这个,挺好用的。

用法:

在jar包中,resources 中建立 META-INF/services文件夹,文件名作为接口的全限定名

ServiceLoader SPI的简单认知_第1张图片

ServiceLoader SPI的简单认知_第2张图片


    public static  ServiceLoader getServiceLoader(Class clazz) {
        if (shouldUseContextClassloader()) {
            return ServiceLoader.load(clazz);
        } else {
            return ServiceLoader.load(clazz, clazz.getClassLoader());
        }
    }


    public static void main(String[] args) {
        ServiceLoader serviceLoader = ServiceLoaderUtil.getServiceLoader(ProcessorSlots.class);
        for (ProcessorSlots processorSlots : serviceLoader) {
            System.out.println(processorSlots.getClass());
        }
    }

打印日志:

class com.example.web.util.NodeSelectorSlot
class com.example.web.util.ClusterBuilderSlot

你可能感兴趣的:(Spring)