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模块

相关推荐
2601_962071573 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww89491113 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
淡海水4 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero4 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-5 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
zww89491116 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
黑马程序员毕设7 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳7 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
白山编程大哥8 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
_Twink1e8 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen