当前位置: 首页 > news >正文

Spring Boot 中自动装配机制的原理

(摘自mic老师面试题)
最近一个粉丝说,他面试了 4 个公司,有三个公司问他:“Spring Boot 中自动装配 机制的原理”
他回答了,感觉没回答错误,但是怎么就没给 offer 呢?
对于这个问题,看看普通人和高手该如何回答。
普通人
嗯… Spring Boot 里面的自动装配,就是@EnableAutoConfiguration 注解。
嗯…它可以实现 Bean 的自动管理,不需要我们手动再去配置。
高手
自动装配,简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 器里面,不需
要开发人员再去写 Bean 的装配配置。
在 Spring Boot 应用里面,只需要在启动类加上@SpringBootApplication 注解就可
以实现自动装配。 @SpringBootApplication 是一个复合注解,真正实现自动装配的注解是
@EnableAutoConfiguration。
(如图)自动装配的实现主要依靠三个核心关键技术。
1. 引入 Starter 启动依赖组件的时候,这个组件里面必须要包含@Configuration 配
置类,在这个配置类里面通过@Bean 注解声明需要装配到 IOC 容器的 Bean 对象。
2. 这个配置类是放在第三方的 jar 包里面,然后通过 SpringBoot 中的约定优于配置
思想,把这个配置类的全路径放在 classpath:/META-INF/spring.factories 文
中。这样 SpringBoot 就可以知道第三方 jar 包里面的配置类的位置,这个步骤主
要是用到了 Spring 里面的 SpringFactoriesLoader 来完成的。
3. SpringBoot 拿到所第三方 jar 包里面声明的配置类以后,再通过 Spring 提供的
ImportSelector 接口,实现对这些配置类的动态加载
在我看来,SpringBoot 是约定优于配置这一理念下的产物,所以在很多的地方,都会
看到这类的思想。它的出现,让开发人员更加聚焦在了业务代码的编写上,而不需要去
关心和业务无关的配置。
其实,自动装配的思想,在 SpringFramework3.x 版本里面的@Enable 注解,就有了
实现的雏形。@Enable 注解是模块驱动的意思,我们只需要增加某个@Enable 注解,
就自动打开某个功能,而不需要针对这个功能去做 Bean 的配置,@Enable 底层也是
帮我们去自动完成这个模块相关 Bean 的注入。
以上,就是我对 Spring Boot 自动装配机制的理解。
结尾
发现了吗?高手和普通人的回答,并不是回答的东西多和少。
而是让面试官看到你对于这个技术领域的理解深度和自己的见解,从而让面试官在一大
堆求职者中,对你产生清晰的印象。
好的,本期的普通人 VS 高手面试系列的视频就到这里结束了,喜欢的朋友记得点赞收
藏。

相关文章:

Spring Boot 中自动装配机制的原理

(摘自mic老师面试题) 最近一个粉丝说,他面试了 4 个公司,有三个公司问他:“Spring Boot 中自动装配 机制的原理” 他回答了,感觉没回答错误,但是怎么就没给 offer 呢? 对于这个问题…...

如何安装Wnmp并结合内网穿透实现外网访问内网Wnmp服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包,安装完成后即可得到一个Nginx MyS…...

网工内推 | 上市公司,云平台运维,IP认证优先,13薪

01 上海新炬网络信息技术股份有限公司 招聘岗位:云平台运维工程师 职责描述: 1、负责云平台运维,包括例行巡检、版本发布、问题及故障处理、平台重保等,保障平台全年稳定运行; 2、参与制定运维标准规范与流程&#x…...

Linux安装DMETL4

Linux安装DMETL4 产品与环境介绍1 规划安装路径2 DM8安装路径2.1 达梦数据库程序安装路径2.2 初始化达梦数据库2.3 创建数据库用户名 DMETL 3 安装DMETL3.1 查看安装包与授权3.2 安装DMETL程序3.3 DMETL安装日志 4 启动DMETL5 DMETL连接数据库后会自动创建相关资源表6 达梦数据…...

Python中编码声明的方法

编码声明主要是为了解决编码问题。由于Python 3的默认编码是UTF-8,因此在使用Python 3编写源代码时,通常不需要在文件开头添加编码声明。但是,如果您使用的编码不是UTF-8,则需要在文件开头添加编码声明,以确保Python解…...

css设置浏览器表单自动填充时的背景

浏览器自动填充表单内容,会自动设置背景色。对于一般的用户,也许不会觉得有什么,但对于要求比较严格的用户,就会“指手画脚”。这里,我们通过css属性来设置浏览器填充背景的过渡时间,使用户看不到过渡后的背…...

windows系统下查看安卓apk的sha1

1.在apk所在文件夹打开cmd或者powershell 2.输入 certutil -hashfile xxx.apk SHA1 这样就可以了 3.指令格式 certutil -hashfile FileName [HashAlgorithm] certutil -hashfile:原样输入 FileName:文件名 HashAlgorithm:可选项包括&…...

openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述

文章目录 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述116.1 背景信息116.2 操作步骤 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述 116.1 背景信息 数据库安全对数据库系统来说至关重要。openGauss将用户对数据库的所有操作…...

python编程复习系列——week2(Input Output (2))

文章目录 一、多行代码语句二、Escape序列三、字符串格式四、数值运算课后作业 一、多行代码语句 🥞使用反斜杠\来表示在下一行中继续使用一条语句。 subject_code "CSCI111" subject_mark 80 subject_grade "D" result "Subject re…...

为什么HTTP用得很好的,开始普及HTTPS呢?

显而易见,现在的HTTP早已不安全,当我们在浏览各个网站时会发现HTTP前面都会显示不安全,因为HTTP是明文传输,一旦电脑被植入了木马,木马程序就会主动周期性发消息给Internet的控制终端,这样NAT小洞会一直敞开…...

C++day6作业

1.思维导图 2.编程题: 以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在&am…...

【 毕设项目源码推荐 javaweb 项目】 基于 springboot+vue 的图书个性化推荐系统的设计与实现(springboot003)

简介 :::warning 【 毕设项目源码推荐 javaweb 项目】 基于 springbootvue 的图书个性化推荐系统的设计与实现适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负…...

FFmpeg编译hevc版本,支持mac、linux系统

相关前置库 openssl 仓库:https://github.com/openssl/openssl.git编译方式参考INSTALL.md中的步骤 # Unix / Linux / macOS$ ./config$ make && sudo make installlame库 如果需要处理mp3相关,依赖lame库, 仓库:https…...

AI系统ChatGPT程序源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画+已支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

Unity 3D 调整cube的颜色

1.选中Assets后,右键->Create->Material 2.调整Material的颜色,然后将Material拖到对应的cube上...

数字通信和fpga概述——杜勇版本学习笔记

1数字通信处理流程 脉冲调制是每个数字通信系统中间必不可少的环节,通常是使用升余弦滚降滤波器来实现。 超外差接收机原理是利用本地产生的振荡波与输入信号混频,将输入信号频率变换为某个预先确定的频率的方法。超外差原理最早是由E.H.阿姆斯特朗于1…...

17.复制字符串 ,包括\0

#include<stdio.h> #include <cstring>int main(){int len1,len2;char s1[44];char s2[33];scanf("%s",s1);scanf("%s",s2);len1strlen(s1)1;printf("先s1的字符长度为&#xff1a;%d\n",len1) ;strcpy(s1,s2) ;printf("复制字…...

C# List<T>.IndexOf()方法的使用

C#中的List<T>.IndexOf()方法用于查找指定元素在列表中的索引位置。它返回第一个匹配项的索引&#xff0c;如果未找到匹配项&#xff0c;则返回-1。 语法&#xff1a;有三种参数可选 int List<T>.IndexOf(T item); int List<T>.IndexOf(T item, int star…...

深入理解JVM虚拟机第十八篇:JVM种局部变量表结构的认识

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻JVM 本文章简介:话不多说,让我们讲清楚虚拟机栈存储结构和运行原理 文章目…...

zabbix监控安装-linux

zabbix6.4中文文档1. 简介 (zabbix.com) Zabbix 是一个企业级的开源分布式监控解决方案。 1.zabbix结构体系 Server&#xff1a; server 是存储所有配置、统计和操作数据的中央存储库。 Proxy&#xff1a; zabbix proxy可以代替 Zabbix server 收集性能和可用性数据。p…...

机器学习数据预处理核心方法与实战指南

1. 为什么数据预处理在机器学习中至关重要第一次接触机器学习项目时&#xff0c;我犯了一个典型错误——直接将原始数据扔进算法中。结果可想而知&#xff0c;模型表现惨不忍睹。这让我深刻认识到&#xff1a;数据预处理不是可选项&#xff0c;而是机器学习工作流中不可或缺的关…...

FanControl终极实战:Windows风扇控制与智能散热管理全解析

FanControl终极实战&#xff1a;Windows风扇控制与智能散热管理全解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...

探索Osiris:基于Panorama UI的CS2跨平台游戏增强框架实践

探索Osiris&#xff1a;基于Panorama UI的CS2跨平台游戏增强框架实践 【免费下载链接】Osiris Cross-platform game hack for Counter-Strike 2 with Panorama-based GUI. 项目地址: https://gitcode.com/gh_mirrors/os/Osiris 引言&#xff1a;当游戏界面成为技术创新的…...

免费复古字体终极指南:EB Garamond 12快速上手完整教程 [特殊字符]

免费复古字体终极指南&#xff1a;EB Garamond 12快速上手完整教程 &#x1f3a8; 【免费下载链接】EBGaramond12 项目地址: https://gitcode.com/gh_mirrors/eb/EBGaramond12 你是否在为设计项目寻找一款既有历史底蕴又完全免费的开源字体&#xff1f;EB Garamond 12正…...

终极神界原罪2模组管理指南:如何快速解决模组冲突问题

终极神界原罪2模组管理指南&#xff1a;如何快速解决模组冲突问题 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager Divinity Mod Manager是一款…...

8051单片机实战:用TX8T3260芯片实现RF-315/433MHz遥控器信号的学习与重放功能

8051单片机实战&#xff1a;TX8T3260芯片实现RF-315/433MHz遥控信号学习与重放 在智能家居和物联网设备开发中&#xff0c;遥控信号的兼容性一直是工程师面临的挑战。传统方案需要为每个被控设备配备专用遥控器&#xff0c;而学习型遥控技术通过捕获、存储和重放原始信号&#…...

随机退避:让重试更聪明

一、问题的起点 在分布式系统中&#xff0c;网络抖动、服务限流、数据库超时无处不在。面对失败&#xff0c;最直觉的做法是&#xff1a;立刻重试。但这恰恰是最危险的做法。 设想一台后端服务因为短暂过载而返回 503&#xff0c;此时同时连接它的 1000 个客户端立刻全部重试—…...

BetterJoy终极指南:5分钟将Switch手柄变身为PC游戏神器

BetterJoy终极指南&#xff1a;5分钟将Switch手柄变身为PC游戏神器 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com…...

Flink DataStream API避坑指南:从匿名内部类到Lambda,你的reduce和keyBy真的写对了吗?

Flink DataStream API避坑指南&#xff1a;从匿名内部类到Lambda的深度优化实践 当开发者从Flink入门迈向进阶时&#xff0c;常常会遇到一个关键转折点——如何将示例代码转化为真正健壮的生产级实现。DataStream API作为Flink核心编程接口&#xff0c;其看似简单的算子背后隐藏…...

3大核心优势解锁Windows本地实时语音转文字:TMSpeech深度解析

3大核心优势解锁Windows本地实时语音转文字&#xff1a;TMSpeech深度解析 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱&#xff1f;担心语音数据上传云端泄露隐私&#xff1f;或者厌倦了网…...