springboot3自动装配机制原理(小白也看得懂)

news2024/11/27 0:17:52

@springbootApplication注解

实现自动装配的核心就是@EnableAutoConfiguration。(springboot就是通过此注解实现自动装配机制,主要作用就是让springboot去扫描默认的配置类,如果没有这个类的话,springboot只会默认扫描启动类下包中各个类的注解)

 @Import注解的作用就是将对应的类配置到ioc容器中,这里就是AutoConfigurationImportSelector类配置到ioc容器中。

AutoConfigurationImportSelector类

这个类的作用就是自动配置类选择器。

 该配置类会通过此方法getAutoConfigurationEntry获取获取要自动配置的类。(此时就扫描了这146个默认配置类)

 启动进行DEBUG,可以看到有146个自动装配类,在断点处会执行getCandidateConfigurations方法。

在这些扫描到的默认配置类中只要有@AutoConfiguration注解并且没有对应的导入限制,就进行自动装配。 (在默认的配置类范围内识别)

导入不成功例子:

在此配置类中还需要ioc容器中存在相应的类才能执行自动装配,所以146个配置类并表示都进行配置的。 

默认的配置类范围内在

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports.

 总共默认自动装配的类有146个xxxxAutoConfiguration配置类

自动配置类与application.yml绑定原理

 例子:平时我们想要改tomcat的端口号时只需要在application.yml中修改就可以生效,分析源码。

在ServletWebServerFactoryAutoConfiguration配置类中有:

 @EnableConfigurationProperties(ServerProperties.class) 

就是将外部引入的serverProperties类配置到ioc容器中。

 ServerProperties类使用@ConfigurationProperties注解将applicatinon.yml中以server为前缀的配置信息赋给ServerProperties类。(此时此类就有port的值,也就是端口号的值)

 在返回servletweb工厂中,也就是ServletWebServerFactoryCustomizer

 在ServletWebServerFactoryCustomizer类中,因为传入了serverProperties类,最终就可以获取在application.yml中配置的端口号,实现tomcat的端口号更改。

其他的配置类和application.yml的属性绑定的步骤和此处的步骤一致。

总流程图 

核心流程总结:

1、导入starter,就会导入autoconfigure包。

2、autoconfigure 包里面 有一个文件 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,里面指定的所有启动要加载的自动配置类

3、@EnableAutoConfiguration 会自动的把上面文件里面写的所有自动配置类都导入进来。xxxAutoConfiguration 是有条件注解进行按需加载

4、xxxAutoConfiguration给容器中导入一堆组件,组件都是从 xxxProperties中提取属性值

5、xxxProperties又是和配置文件进行了绑定

效果:导入starter、修改配置文件,就能修改底层行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nuxt3项目在宝塔上使用pm2放到服务器

最近在将nuxt3项目扔到服务器上的时候遇到了一些问题,发现打包后的nuxt项目与正常的vue文件有些差别,缺失了index.html文件。 这边就记录下nuxt3项目是怎么放到服务器上的🤔 一、打包nuxt3项目 执行对应的打包命令 yarn build 二、找…

Electron详解(一):基本介绍

文章目录 一、electron简介二、发展历史三、electron优缺点四、electron和Qt的对比五、使用electron开发的实际案例六、electron 的原理 一、electron简介 Electron(官网:https://www.electronjs.org/zh/)是由Github开发,用HTML&…

17:00面试,还没10分钟就出来了,问的实在是太...

从外包出来,没想到死在另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到8月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…

CVE-2022-30887

文章目录 CVE-2022-30887一、漏洞介绍二、渗透步骤1、打开网站2、登录网站3、shell4、文件上传5、查看flag CVE-2022-30887 一、漏洞介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口,客户是该软件的主要…

MLC Chat App上架苹果App Store可在本地运行语言模型;谷歌推出AI设计工具StyleDrop

🦉 AI新闻 🚀 开源项目MLC Chat App上架苹果App Store,可在本地运行语言模型 摘要:CMU助理陈天其教授表示,开源项目MLC LLM的独立聊天应用程序MLC Chat App已上架苹果App Store,允许将任何语言模型本地部…

3.用图神经网络进行图分类

在本教程中,我们将更深入地了解如何将图神经网络(GNN)应用于图分类任务。图分类是指在给定图的数据集的情况下,基于一些结构图的属性对整个图(与节点相反)进行分类的问题。在这里,我们希望嵌入整…

uniapp:HbuildeX项目实现jenkins自动化打包上传

前序: 基于HBuilderX创建的项目。 配置uniapp 指令式打包APP、微信小程序、H5。 ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。 可实现多线程同时打…

社会主义核心价值观解码

今天随机刷题时,遇到了一个蛮有意思的题,浅浅记录一下,挺好玩的。 题目: [鹤城杯 2021]easy_crypto 难度:很小啦,差不多签到题 文件下载的内容如下: 最开始我以为是把每个词按社会主义那个顺序…

Java基础学习+面向对象

一,基础概念介绍 1.1Java跨平台原理(一次编译,处处运行) Java 源代码经过编译,生成字节码文件,交由 Java 虚拟机来执行,不同得系统有不同得JVM,借助JVM 实现跨平台。就比如说我们在 Windows 下…

Redis内存优化——内存淘汰及回收机制

文章目录 Redis内存优化——内存淘汰及回收机制内存淘汰策略LRU和LFULRU和Redis的近似LRU什么是LRURedis的近似LRU LFU如何选择 内存回收策略惰性删除定期删除 配置文件说明总结 系列文章目录 本文是系列文章,为了增强您的阅读体验,已将系列文章目录放入…

Yakit: 集成化单兵安全能力平台使用教程·MITM交互式劫持篇

Yakit: 集成化单兵安全能力平台使用教程MITM交互式劫持篇 1.免配置抓包2.拦截HTTPS的消息3.代理和浏览器设置4.内容规则:标记/替换流量5.过滤流量6.网站树视角1.免配置抓包 点击手工测试--MITM交互式劫持即可进入MITM劫持页面,点击免配置启动进入免配置启动设置界面(这类似…

ESP32-C2-12模组 使用乐鑫AT固件示例

ESP32C2 AT固件使用 ESP32 C2模组,如图1-1所示 图1-1 ESP32 C2模组 ESP32 C2开发板,如图1-2所示 图1-2 ESP32 C2开发 方案亮点 1、完整的 WiFi 子系统,符合 IEEE 802.11b/g/n 协议,具有 Station 模式、SoftAP 模式、SoftAP Stat…

vue3+uniapp开发小程序踩坑指南(持续更新)

小程序常见问题汇总: 1、TypeError: Cannot read property forceUpdate of undefined 原因:没有配置小程序AppID 2、define is not defined 报错一堆文件找不到,并且有define is not defined错误提示 原因:没有配置基础库或者基…

Linux安装Nginx并部署前端项目【内/外网-保姆级教程】

目录 1下载所需要的安装包 2安装步骤 2.1将下载的完整文件夹通过压缩包的形式,上传到你的路径下解压. 2.2 进入到gcc文件夹下,执行命令: 2.3进入到gcc-c文件夹下,执行命令: 2.4检查gcc、gcc-c是否安装成功 2.5执…

【深度学习】日常笔记

一开始感觉学习方向有点飘忽不定,后面查找资料和思考,发现其实图神经网络、异构图、推荐系统这三者的概念其实是相通,紧密联系的。推荐系统是指根据用户历史行为和偏好,为用户提供个性化的商品或服务推荐。而在推荐系统中&#xf…

公司新来个以前拿 20K 出来的,让我见识到了什么叫真正的测试天花板....

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

HCIE-Cloud Computing LAB备考第二步:实战解题–第五题:论述一--双活容灾设计--记忆宫殿

文章目录 题目解法记忆宫殿存储链路要求存储业务网络链路存储复制网络链路仲裁网络链路 VRM要求主机要求存储要求 对比法存储业务网络链路和存储复制网络链路VRM和主机要求 提炼法 题目 完成FC双活设计,交由工程师搭建。为达到预期效果请把以下要求罗列出来&#x…

一文带你进入自动化测试

8年前我刚进入到IT行业,现在发现学习软件测试的人越来越多,今天我想根据自己的行业经验给大家提一些建议。 最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业。想要获得更好的待遇和机会,不断提升自己的技能栈成了…

001网络模型与socket的介绍

我们平常使用的程序(或者说软件)一般都是通过应用层来访问网络的,程序产生的数据会一层一层地往下传输,直到最后的网络接口层,就通过网线发送到互联网上去了。数据每往下走一层,就会被这一层的协议增加一层…

chatgpt赋能python:Python如何写配置文件-一种简单的方法

Python 如何写配置文件 - 一种简单的方法 在Python编程中,配置文件是必不可少的,因为它们允许我们在代码中保持所有可配置属性,而不是在代码中写死它们。这样,我们可以很容易地更改我们的应用程序的行为,而不必更改代…