Java进阶-SPI机制

SPI机制

前言

  • 在主键版本中没有web.xml文件,springmvc如何通过继承AbstractAnnotationConfigDispatcherServletInitializer来启动SpringMVC?这就需要通过SPI机制来解决。先放一下大致思路:tomcat启动时会运行实现了servlet规范ServletContainerInitializer接口的实现类,而spring就是用SpringServletContainerInitializer类实现了该规范,因此执行时会实例化SpringServletContainerInitializer以达到启动mvc,另外在该类上有@HandlesTypes(WebApplicationInitializer.class)注解来实现mvc相关配置的加载,加载实现了WebApplicationInitializer的类

讲解代码

链接: JAVA之SPI机制

  • 以下讲解均已以上代码进行分析,请自行下载

过程分析

  1. java-spi它里面定义了Phone规范,以及默认的默认的实现类。

  2. java-spi-ext引用java-spi的模块可以实现扩展 Phone接口规范

  3. 运行实现Phone的实现类并该类的路径在META-INF.services中配置

    public class ApplicationMain {

    public static void main(String\[\] args) {

    ServiceLoader serviceLoader=ServiceLoader.load(Phone.class);

    serviceLoader.forEach((Phone phone)->{

    if (phone instanceof DefaultPhone){

    phone.call();

    }

    复制代码
            if (phone instanceof IOSPhone){
                phone.call();
            }
    
            if (phone instanceof AndroidPhone){
                phone.call();
            }
        });
    }

    }

从而达到了通过运行java-spi-ext模块来启动java-spi模块

相关推荐
Flittly3 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了3 小时前
Java 生成二维码解决方案
java·后端
人活一口气8 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP10 小时前
Vibe Coding -- 完整项目案例实操
java
荣码10 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing10 小时前
Google第三方授权登录
java·后端·程序员
明月光81810 小时前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑19 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯20 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路1 天前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java