【Java】SPI机制

 

 

SPI全称:

  服务供应商接口 Service Provider Interface

  服务发现机制

入门概念视频来自于:

https://www.bilibili.com/video/BV1E44y1N7Nk

 

其它参考:

https://www.bilibili.com/video/BV1t44y127Uq

 

提供一个接口规范:

package cn.cloud9.spi;

/**
 * @projectName: Java
 * @author: Cloud9
 * @date: 2022年05月26日 10:39
 * @version: 1.0
 */
public interface ISpiService {
    void function();
}

 

对应提供实现类A:

package cn.cloud9.spi;

/**
 * @projectName: Java
 * @author: Cloud9
 * @date: 2022年05月26日 10:40
 * @version: 1.0
 */
public class SpiServiceA implements ISpiService {
    @Override
    public void function() {
        System.out.println("服务A实现!");
    }
}

实现类B:

package cn.cloud9.spi;

/**
 * @projectName: Java
 * @author: Cloud9
 * @date: 2022年05月26日 10:41
 * @version: 1.0
 */
public class SpiServiceB implements ISpiService {
    @Override
    public void function() {
        System.out.println("服务B实现!");
    }
}

  

通常调用办法是多态,接口类型应用具体实现类

1、SPI规范要求实现类的资源描述放在META-INF/services目录下面

2、编写的文件名就是接口的名称

3、文件内容就是对应的实现类的类名

 

 

实际访问获取时,通过服务加载器根据接口的字节对象去翻查实现资源

package cn.cloud9.spi;

import java.util.ServiceLoader;

/**
 * @projectName: Java
 * @author: Cloud9
 * @date: 2022年05月26日 09:07
 * @version: 1.0
 */
public class SpiTest {
    public static void main(String[] args) {
        ServiceLoader<ISpiService> loader = ServiceLoader.load(ISpiService.class);

        for (ISpiService spiService : loader) {
            spiService.function();
        }
    }
}

 

执行结果:

服务A实现!
服务B实现!

Process finished with exit code 0

  

 

 

posted @ 2022-05-26 11:16  emdzz  阅读(35)  评论(0编辑  收藏  举报