美文网首页
SPI 外部接口实现类

SPI 外部接口实现类

作者: 极简博客 | 来源:发表于2022-08-06 12:17 被阅读0次

上篇文章AJ-Captcha用户行为验证码中提到SPI,查看了相应的源码实现,觉得挺新奇的;就单独拎出来讲解一下,加深印象。

1、什么是SPI?

  SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。
SPI的作用就是为这些被扩展的API寻找服务实现。

  我的理解:在引用第三方jar时,提供自己外部实现接口类。

2、使用场景

  内部jar接口外部实现拓展场景

3、简单实现

  • META-INF.services下创建接口完整名称文件

  • 内部内容为实现类路径

com.anji.captcha.demo.service.CaptchaCacheServiceRedisImpl
  • jar包内部实现({@link com.anji.captcha.service.impl.CaptchaServiceFactory}),通过ServiceLoader.load(CaptchaCacheService.class)将接口实现类保存在Map<Type, CaptchaService>集合中
public static CaptchaCacheService getCache(String cacheType) {
    return cacheService.get(cacheType);
}

public volatile static Map<String, CaptchaService> instances = new HashMap();
public volatile static Map<String, CaptchaCacheService> cacheService = new HashMap();

static {
    ServiceLoader<CaptchaCacheService> cacheServices = ServiceLoader.load(CaptchaCacheService.class);
    for (CaptchaCacheService item : cacheServices) {
        cacheService.put(item.type(), item);
    }
    logger.info("supported-captchaCache-service:{}", cacheService.keySet().toString());
    ServiceLoader<CaptchaService> services = ServiceLoader.load(CaptchaService.class);
    for (CaptchaService item : services) {
        instances.put(item.captchaType(), item);
    }
    ;
    logger.info("supported-captchaTypes-service:{}", instances.keySet().toString());
}

4、原理解析

ServiceLoader

相关文章

  • SPI 外部接口实现类

    上篇文章AJ-Captcha[https://www.jianshu.com/p/ddbd1727fa3e]用户行...

  • Java - SPI

    SPI简介 如何使用SPI 应用举例1. 组织方制定接口2. 实现方根据SPI规范实现接口3. 组织方加载实现类 ...

  • 2.Dubbo内核实现之基于SPI思想Dubbo内核实现

    SPI接口定义定义了@SPI注解 只有在接口打了@SPI注解的接口类才会去查找扩展点实现 会依次从这几个文件中读取...

  • 框架基础之SPI机制

    1 定义 SPI 的全名为 Service Provider Interface ,用于接口寻找服务实现类 实现方...

  • java SPI入门详解

    Java SPI机制详解 1、什么是SPI? ​ 如上图所示,接口对应的抽象SPI接口;实现方实现SP...

  • 8.dubbo-SPI自定义配置

    扩展点就是@SPI注解的接口,后面的名字指定的就是默认的实现类 自定义SPI实现方式 1.在resources目录...

  • dubbo源码(二)-SPI源码详解

    上篇我们简单讲了dubbo SPI的使用,没有太多代码,一个接口和两个实现类,还有一个配置文件和测试类。接口和实现...

  • Dubbo之自适应拓展机制

    什么是自适应拓展机制? 1、基于Dubbo实现的拓展机制,在对拓展(接口实现类)通过SPI方式进行类加载时,有时候...

  • SPI在android中的使用思想

    SPI(Service Provider Interface) 本质是将接口实现类的全限定名配置在文件中,并由服务...

  • Java中的SPI机制及接口多实现调用

    Java中的SPI机制及接口多实现调用 0x00 SPI机制 SPI 全称为 (Service Provider ...

网友评论

      本文标题:SPI 外部接口实现类

      本文链接:https://www.haomeiwen.com/subject/goamwrtx.html