Java SPI机制

java SPI机制

概念:SPI(Service Provider Interface),JDK内置的服务发现机制,由工具类java.util.ServiceLoader提供相应的支持。其中有俩个重要概念:

  • Service:通常是接口或抽象类,具体类也可以(但不推荐)
  • Service Provider:服务提供者,服务具体实现类

作用:SPI可以通过在ClassPath路径下META-INF/service文件夹中查找和Service全限定名相同的文件,并自动加载文件中所指定的Service Provider全限定名的类。#符号作为注释

实现原理:SPI使用简单而且原理也非常简单,SPI加载服务的方式就是通过 ClassLoader.getResources 方法找到 META-INF/services 目录下的相应文件,然后解析文件得到服务提供者的类名。最后通过 Class.forName() -> clazz.newInstance() 得到实例返回。

SPI和API区别:

应用:JDK,Spring,Dubbo,JDBC,SLF4j日志体系中都是用了SPI机制

Simple Accomplish

JDK实现SPI

首先准备接口和接口实现类

接口:

package com.spi;

public interface service {
    public void print();
}

接口实现类:

package com.spi;

public class serviceimpl implements service {

    public void print() {
        System.out.println("Hello SPI");
    }
}

META-INF/service文件夹下:

最后使用Test类测试一下

Reference

Y4tacker简单SPI实现

Java SPI机制及其实现

SPI机制到实现简易日志框架

posted @ 2022-06-18 23:27  B0T1eR  阅读(43)  评论(0)    收藏  举报