• java SPI机制


    1、 SPI是Service Provider Interfaces的简称。根据Java的SPI规范,我们可以定义一个服务接口,具体的实现由对应的实现者去提供,即Service Provider(服务提供者)。然后在使用的时候只要根据SPI的规范去获取对应的服务提供者的服务实现即可

    SPI机制的约定:

    1)         在META-INF/services/目录中创建以接口全限定名命名的文件该文件内容为Api具体实现类的全限定名

    2)         使用ServiceLoader类动态加载META-INF中的实现类

    3)         如SPI的实现类为Jar则需要放在主程序classPath中

    4)         Api具体实现类必须有一个不带参数的构造方法

    参考此博客:https://blog.csdn.net/zmx729618/article/details/53285416?utm_source=copy 

    实例代码如下:

    package com.rookie.bigdata;
    
    /**
     * Created by  on 2018/9/29.
     */
    public interface SPIService {
    
        public void print(String msg);
    }
    package com.rookie.bigdata;
    
    /**
     * Created by  on 2018/9/29.
     */
    public class TJService implements  SPIService {
        @Override
        public void print(String msg) {
            System.out.println("天津市");
        }
    }
    
    
    package com.rookie.bigdata;
    
    /**
     * Created by  on 2018/9/29.
     */
    public class BJService implements  SPIService {
        @Override
        public void print(String msg) {
            System.out.println("北京市");
        }
    }

    com.rookie.bigdata.SPIService文件内如如下:

    #BJ
    com.rookie.bigdata.BJService
    #TJ
    com.rookie.bigdata.TJService

    测试代码

    package com.rookie.bigdata;
    
    import org.junit.Test;
    
    import java.util.ServiceLoader;
    
    /**
     * Created by  on 2018/9/29.
     */
    public class SPITest {
    
        @Test
        public void test1() {
    
            ServiceLoader<SPIService> serviceLoader = ServiceLoader.load(SPIService.class);
            SPIService spiService = null;
            for (SPIService service : serviceLoader) {
    
                service.print("SPI");
            }
        }
    }
  • 相关阅读:
    .NET框架设计—常被忽视的C#设计技巧
    判断网络是否链接
    ADO.NET入门教程(五) 细说数据库连接池
    爬虫selenium中截图
    爬虫极滑块验证思路
    Linux 磁盘分区、挂载
    linux中crontab任务调度
    第30课 操作符重载的概念
    第29课 类中的函数重载
    第28课 友元的尴尬能力
  • 原文地址:https://www.cnblogs.com/haizhilangzi/p/9723351.html
Copyright © 2020-2023  润新知