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

相关推荐
-许平安-13 小时前
MCP项目笔记四(Transport)
开发语言·c++·笔记·ai·mcp
Felven13 小时前
C. Stable Groups
c语言·开发语言
码农的小菜园13 小时前
Java线程池学习笔记
java·笔记·学习
SuperEugene13 小时前
Vue3 + Element Plus 表单校验实战:规则复用、自定义校验、提示语统一,告别混乱避坑|表单与表格规范篇
开发语言·前端·javascript·vue.js·前端框架
2401_8942419213 小时前
基于C++的数据库连接池
开发语言·c++·算法
阿贵---13 小时前
C++中的适配器模式
开发语言·c++·算法
C羊驼13 小时前
C语言学习笔记(十二):动态内存管理
c语言·开发语言·经验分享·笔记·青少年编程
SuperEugene13 小时前
Vue3 + Element Plus 表格查询规范:条件管理、分页联动 + 避坑,标准化写法|表单与表格规范篇
开发语言·前端·javascript·vue.js·前端框架
小邓睡不饱耶13 小时前
东方财富网股票数据爬取实战:从接口分析到数据存储
开发语言·爬虫·python·网络爬虫
dapeng287013 小时前
C++与Docker集成开发
开发语言·c++·算法