SpringBoot spi
java 有自己的spi,dubbo也有自己的spi,Spring也有自己的spi,而springboot就用到了spirng的spi来实现自动装配。
我们用过springboot的都知道,在SpringBoot中我们需要添加任何一个配置类都只需要添加一个配置类,比如
@Configuration
public class SpiTestConfig {public SpiTestConfig() {System.out.println("test config init!");}
}
springboot 默认会给我们扫描Application及其子包里面的配置bean然后初始化
我们这里的项目结构为:
可以看到 SpiTestConfig和 Application不属于同包,所以在Springboot程序启动不会加载Bean SpiTestConfig
。
其实在我们使用Springboot多模块项目作配置可以能也会遇到这样的问题,想要让SpiTestConfig
加载其实很简单。我们只需要在resource中添加一个文件夹META-INF,再添加配置文件spring.factories
内容如下
## 允许自动加载
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
config.SpiTestConfig
这样就可以做到自动加载配置类了(ps,仅仅依赖这一点肯定是不够的,但是我们这里只是分析这一点)。
其实我们在使用三方 spring-boot-starter就是使用这种机制,我们的Application显然不会和三方jar处于同包或者子包。三方Bean Configuration需要加载就需要使用spring 的spi机制。
我们可以随便看看
我们随便看看 springframework.boot.autoconfigure就可以看到配置了如此多的自动加载key
而加载的源码调用大致如下
这里的源码想要自己去深入研究的可以自己去debug
SpringBoot spi相关推荐
- 让你的SpringBoot更有个性, 定制酷炫Banner
前言 在进行SpringCloud进行开发的时候,不知道朋友们有没有注意到你的SpringBoot微服务启动的时候的日志里会出现启动画面: 如下图所示 特别的酷炫有风格: 这个方式可以非常简单的通过S ...
- springboot 自动注入servlet原理
前置内容: servlet的多种注册方式 SpringBoot启用 ServletContainerInitializer ServletContainerInitializer-SPI SPI部分内 ...
- 四种引用类型在Springboot中的使用
今天 4ye 来和小伙伴们聊聊这个 强引用,软引用,弱引用,幻象引用(虚引用)啦???? 嘿嘿,主要是最近读源码的时候经常看到,然后又想到自己第一次知道这个神奇的东西是在 2020-8-21???? ...
- ShardingSphere笔记(一): 经验和踩坑总结
ShardingSphere笔记(一): 使用经验总结 文章目录 ShardingSphere笔记(一): 使用经验总结 一.背景 框架选择 二.ShardingSphere-jdbc 只是一个帮助你 ...
- 将 Bean 放入 Spring 容器中的方式
文章目录 将 Bean 放入 Spring 容器中的方式 1.@Configuration + @Bean 2.@Componet + @ComponentScan 3.@Import注解导入 3.1 ...
- apollo配置中心源码全解析
文章目录 前言 源码解析 与springboot集成 远程配置的加载 长轮询监听配置更改 服务端长轮询机制 通过客户端发布配置 总结 前言 紧接前文nacos配置中心,本文继续讲目前比较火热的动态配置 ...
- dubbo源码学习总结
前言 总结 内容主要包括dubbo 框架的spi 实现,服务暴露实现,服务调用实现,以及个人感觉里面比较好的设计分享.涉及的代码部分较多.主要是自己的主观理解,如有纰漏 可以随时指正. RPC rpc ...
- 【SpringBoot】SPI 与 spring.factories
目录 什么是 SPI SPI 原理 Spring.factories 实现原理 应用 什么是 SPI 即 Service Provider Interface.是 JDK 内置的一种服务提供发现机制, ...
- SpringBoot应用篇之FactoryBean及代理实现SPI机制示例
更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 FactoryBean在Spring中算是一个比较有意思的存在了,虽然在日常的业务开发中,基本上不怎么会用到,但在某些场景下,如果用得 ...
最新文章
- box-cox数据规整转换
- 如何训练孩子上厕所(初级篇)
- 使用Spring Boot搭建你的第一个应用程序
- 【Microstation】第一章:Microstation三维模型构建概述
- 爬虫python 新闻,Python爬虫实例--爬取人民网新闻
- 微软 VS Code 或将取代 Visual Studio!
- 网页运行python脚本_python脚本和网页有何区别
- 基于智能电网的电力线载波通信研究
- python银行卡号识别_EAST+CRNN银行卡号识别,附数据集
- 对事件流的小故事理解
- 14岁考入清华,22岁博士四年级,杜克大学杨幻睿的AI成长之路
- 【JAVA】JSR、JCP是什么?
- Domino多瑙河EAP3以及Nomad Web 1.0.5
- kali liunx使用心得之命令行模式下如何配置连接无线网络
- snprintf() 函数
- javascript可以直接比较时间字符串的大小
- 【STM32】芯片自锁、No Cortex-M SW Device Found/HardFault_Handler无法下载等问题的解决办法
- 业务结构单一,天润云能借IPO说出好故事吗?
- android之cpu使用率
- 扩展欧几里德算法详解
热门文章
- DSP芯片在实时图像处理系统中的应用
- arm嵌入式led灯闪烁实验报告_嵌入式led灯亮灭实验报告
- Jzoj P5937 斩杀计划___枚举+贪心
- python判断素数的方法简书_判断素数
- 在python中使用ffmpeg实现mp4转wav
- 一定要牢记软件工程的铁律
- C++11中enable_shared_from_this的用法解析
- python游戏编程网课_Python 学习最佳方式_创建游戏_编程一个机器人
- 仙境传说 第一章之二 卢渊*冰雷魔法师
- 2021地理设计组一等奖:面向游客的旅游路线优化设计——以丹霞山景区为例