• 【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
    

      

     

  • 相关阅读:
    android 颜色值参考,(有颜色图
    Virtual address cache memory, processor and multiprocessor
    VUEJS2.0源码理解--优
    qlserver、Mysql、Oracle三种数据库的优缺点总结
    三层与MVC
    数据结构 常用定义
    c语言 typedef
    C动态内存分配
    c 指针(一)
    stdlib 头文件
  • 原文地址:https://www.cnblogs.com/mindzone/p/16312809.html
Copyright © 2020-2023  润新知