以初学者的视角认识 SpringBoot自动配置原理

一文读懂springboot:从皇帝视角读懂springboot ​SpringBoot的哲学,并非创造新功能,而是通过​。 阅读详情
AI摘要

本文从初学者视角介绍SpringBoot自动配置原理。自动配置可将配置类和bean对象自动存入IOC容器,简化开发。重点解析了@SpringBootApplication注解内的@ComponentScan、@SpringBootConfiguration、@EnableAutoConfiguration三个注解,阐述了它们在包扫描、声明配置类、实现自动配置方面的作用及原理。

1.什么是SpringBoot的自动配置

 SpringBoot的自动配置就是当spring容器启动后,一些配置类,bean对象就自动存入到IOC容器中,无需手动声明,从而简化开发,省去繁琐的配置操作

2.原理解析

*想要了解自动配置的原理以我们初学者的视角关注Application启动类上@SpringBootApplication注解即可  该注解是一个组合注解 其内部还封装了七个注解 分别是四个元注解(@Retention @Target  @Documented @Inherited)与本文的重点关联不大就不再展开叙述 重点为接下来的三个注解 分别是 @ComponentScan @SpringBootConfiguration @EnableAutoConfiguration

接下来我将以重要程度来依次介绍这三个注解

1.@ComponentScan(basePackages)该注解用于包扫描 会扫描当前包及其子包的组件(如 @Component、@Service、@Repository、@Controller )上述几个注解都用于将类注册为Spring管理的bean  只有当注册行为被扫描到时才会生效  所以尤其需要注意当你想要添加的bean所在的位置不属于启动类所在的包及其子包时需要显示的进行配置 如图所示 为@ComponentScan的参数basePackages赋值 即bean所在的包的全类名

2.@SpringBootConfiguration  其内部封装了@Configuration @Indexed两个注解 @Configuration声明当前类也是配置类(即启动类也是配置类) 即可以在当前类中直接声明第三方bean对象   @Indexed加速应用启动非本文的重点

3.@EnableAutoConfiguration该注解是实现自动配置的核心注解 其内部封装了@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class})  @Import便是核心中的核心 该注解的作用是将配置类或配置文件导入到当前配置类中,导入的配置类中的Bean和其他配置信息也会被包含到当前Spring容器中

3.1@Import({AutoConfigurationImportSelector.class}) 详解:在此处@Import导入了AutoConfigurationImportSelector 可以看到该类实现了接口DeferredImportSelector而该接口是ImportSelector的子接口 所以也可以说AutoConfigurationImportSelector是ImportSelector的实现类 那接下来就让我们看看该类究竟实现了ImportSelector接口的哪个方法 

3.2可以看到该类实现了ImportSelector接口的selectImports方法 该方法封装了需要导入到Spring IOC容器中类的全类名 接下来接让我们一起来看看这些需要导入的类是如何进行封装的

3.3selectImports()方法详解 作为初学者 我们只需要关注 selectImports()调用的getAutoConfigurationEntry()即可

看起来是不是有点复杂,但不必惊慌我们只需要关注getAutoConfigurationEntry()方法中的这个configurations String类型的集合即可 

3.4configurations 这个集合当中封装了 spring.factories与spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports这样的两个配置文件 SpringBoot在启动时会自动加载这两个配置文件的信息

可以看到这两个配置文件配置了一系列类的全类名 最终会被读取出来 通过@Import注解加载到IOC容器进行管理

*总结:

@SpringBootApplication中除四个元注解外 还封装了 

@SpringBootConfiguration-> @Configuration 表明启动类也是一个配置类 

  @ComponentScan用于包扫描

@EnableAutoConfiguration 实现自动装配的核心注解  其内部封装了@Import  导入了AutoConfigurationImportSelector(ImportSelector的实现类) ImportSelector的实现类通过selectImports()方法 将需要的类导入到IOC容器中  

selectImports()方法  调用getAutoConfigurationEntry() 读取这个configurations String类型的集合中封装的spring.factories与 spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports两个配置文件 最终加载到IOC容器中进行管理

SpringSecurity6 | 自动配置(下) 大家好,我是Leo哥🫣🫣🫣,上一节我们揭开了为什么引入依赖之后就会进行登录鉴权这一神秘面纱,了解复习了关于SpringBoot的自动配置以及如何一步一步的通过自动配置让我们请求加上认证权限。本次我们接着讨论关于自动配置相关问题。好了,话不多说让我们开始吧😎😎😎。以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。 阅读详情

相关推荐

MacOS多次踩坑后成功安装Homebrew

来一次性成功安装Homebrew吧 官网提供的安装脚本无法成功安装Homebrew,原因大家都懂的,故采用脚本安装的方式。 下载homebrew的安装脚本brew_install 在Download路径下执行如下脚本 curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install >> brew_install 修改brew_install脚本 修改brew_install脚本。如果你的脚本打开之后是如下

weixin_41847116的博客 1983

玩转springboot之springboot自动配置原理

自动配置其实是由于启动类上配置了@EnableAutoConfiguration注解来进行开启的,那有些人就纳闷了,我启动类上也没有配置@EnableAutoConfiguration注解呀?@EnableAutoConfiguration注解就是用来进行自动配置的,也是springboot的核心,@EnableAutoConfiguration注解是如何做到的自动配置呢?@Configuration注解就相当于一个xml配置文件,可以在该类中配置bean,就像在xml中配置bean一样。

Lxn2zh的博客 735

日志异常检测详细整理,看这一篇就够了(附各项目代码链接)

对于不用的日志键,用它们的参数值向量训练一个参数值异常检测模型来检测有这些参数值反映的系统性能异常。与标准的GAN框架一样,D和G的参数是基于D的输出来更新的,因此鉴别器D可以被训练为尽可能敏感地将正确的标签分配给真实和虚假序列,而生成器将被训练为尽可能聪明地在经过足够多轮的迭代后欺骗鉴别器,即误导D将真实标签分配给虚假序列。LR:逻辑回归是有监督的模型,将处理后的特征矩阵以及标记作为模型的输入,得到训练后的模型,用此模型预测新出现的特征向量,以此判断特征向量是否为异常的,进而判断日志异常。

qq_20368489的博客 1万+

SpringBoot自动配置原理全景剖析

《Java架构师面试:2026自动配置技术演进与量子增强架构》摘要:本文系统阐述SpringBoot 4.0量子增强架构的核心技术,包括四大创新维度:1)量子注解驱动层支持AI预测加载与纠缠态配置同步;2)神经条件评估层实现动态权重决策;3)分布式DNA链配置源采用区块链存储;4)量子装配层实现亚毫秒级启动。重点解析金融级应用方案设计,并给出跨极端环境(如太空计算)的配置策略。面试题库涵盖量子态条件评估、基因调试等前沿场景,技术前瞻涉及DNA存储与跨维度同步。评分标准强调量子原理(30%)、AI条件设计(2

AI_5678的博客 618

Altium Designer操作技巧(1)——原理图中如何批量替换元器件?

《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。

u012526819的博客 2590

储能BMS三级架构解析:从模组到堆的管理与控制

本文深入解析了储能电池管理系统(BMS)的核心三级架构,即电池模组管理层(BMU)、电池簇管理层(BCMU)和电池堆管理层(BAMS)。文章详细阐述了各级的职能分工与协同机制,从底层数据采集、均衡管理,到中层信息汇总与安全控制,再到顶层的系统总控与对外通信,揭示了该架构如何实现大规模储能电池的精细化、安全与高效管理。

ik678901234的博客 472

你是如何理解 Spring Boot 中的自动配置原理的?——一个 8 年 Java 老兵的分享

> 🚀 "Spring Boot 真香!" > 是的,真的香。尤其是它那让人上头的**自动配置(AutoConfiguration)** 。 > 但你有没有想过:**它是怎么知道你想要什么的?**

Minoz_wl的博客 1313

Halcon实战:5分钟搞定灰度图转热力图(附完整代码)

本文提供了一份Halcon实战指南,详细讲解如何在5分钟内将灰度图转换为直观的热力图。通过核心代码演示了利用HSV颜色模型进行色彩映射的原理与步骤,包括图像归一化、通道构建与空间转换,并附赠了深度图可视化等进阶应用技巧,帮助工程师快速提升图像分析效果。

weixin_29240343的博客 283

SpringBoot 自动装配原理

SpringBoot 特性: 1 开箱即用 2 约定大于配置 原理剖析: 开箱即用 SpringMVC 组件 需要; 1 spring-web.xml: 2 web.xml: 相对于这些,SpringBoot 开箱即用就显得特别方便: 从pom.xml开始 可以有一个结论: spring-boot-dependencies:作为父工程,存放了SpringBoot的核心依赖**。我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本**,正是因为SpringBoot的父依赖已经帮我们维护了一套版

其实我也没有太多期盼,毕竟一生太短,少有圆满 199

探索Vortex开源GPGPU:RISC-V SIMT架构(4-1),Execute SFU(1)

本文详细分析了Vortex RISC-V内核6级流水线中Execute阶段的SFU(特殊功能单元)模块。重点介绍了SFU的数据流结构,包含dispatch_unit、pe_switch、csr_unit、wctl_unit和gather_unit五个子模块。文章深入解析了warp控制指令wspawn和tmc的实现机制:wspawn用于激活指定数量的warp并设置新PC值,tmc则用于控制线程掩码和warp状态。通过C代码和汇编指令的对照分析,阐明了这些指令在并行计算中的关键作用,包括线程激活、状态切换和执行

weixin_55313207的博客 1364

OpenCV计算机视觉实战(11)——边缘检测详解

在本节中,我们系统介绍了三大经典边缘检测算子,包括 Sobel 算子:一阶导数平衡了噪声抑制与边缘提取,结合方向信息可用于纹理分析与车道检测;Laplacian 算子:二阶导数对微小亮度突变尤为敏感,配合零交叉和细化技术,可精确捕捉任意方向的细节边缘;Canny 算法:集成多阶段处理与双阈值策略,通过多尺度融合与自适应阈值优化,达到抗噪与细节兼顾的卓越效果。

qq_30167691的博客 4377

Springboot是什么?Springboot详解!入门介绍

Spring Boot的出现大大简化了Spring应用的初始搭建以及开发过程,让开发者快速启动新项目,把精力集中在代码编写和业务逻辑。

小明的Java问道之路 5万+

【Ubuntu】RK3576 Linux 6.10 Ubuntu 22.04 系统中 HUSB311 Type-C 转 DP 显示输出与 Device/OTG 模式切换配置详解

本文详细介绍了在Rockchip RK3576开发板(Linux Kernel 6.10+Ubuntu 22.04)上配置HUSB311 Type-C控制器的设备树实现方案。主要内容包括:1)硬件连接与模块组成;2)设备树完整配置,涵盖Type-C供电、USB OTG/Host模式、DP显示输出等关键功能;3)软件配置步骤与常见问题排查方法。该方案实现了Type-C接口的DisplayPort AltMode显示输出、USB Device/Host模式自动切换等功能,为嵌入式系统Type-C接口开发提供参考

qq_34478161的博客 808

从面试官视角看SpringBoot:除了自动配置和Starter,我们更关心这些实战细节

本文从面试官视角深入探讨SpringBoot实战能力的考察要点,涵盖环境配置管理、性能优化、依赖冲突解决、生产监控等核心实战细节。文章提供了SpringBoot高级配置技巧、问题诊断方法和最佳实践,帮助开发者提升解决复杂问题的能力,满足企业级开发需求。

weixin_30596343的博客 210

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SpringBoot 和 Spring 的区别是什么?

在 Java 后端面试中,Spring 与 SpringBoot 是高频出镜的基础框架。由于很多简历项目都使用 SpringBoot 构建,面试官往往会追问其与传统 Spring 框架的区别,进而深入探查候选人的架构理解、自动配置、启动流程掌握程度。理解这两者的本质差异,不仅能在面试中加分,也有助于你在实际开发中做出合理的技术选型。Spring 和 SpringBoot 不是对立关系,而是“基础 + 快速开发工具”的组合;掌握 SpringBoot 的“自动配置原理”是面试突破重点;

残影的博客 1566

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深入理解SpringBoot自动配置原理,告别背面试题

所以你去面试,别说“Spring Boot自动配置会帮我创建所有Bean”,真正准确的说法是“Spring Boot会在合适的时机、合适的条件下,为缺失的Bean提供合理的默认实现”。还不够,要补一句“排除的本质是让这个配置类的候选资格被吊销,它既不会被解析,也不会触发任何条件评估”。方法上的条件会在注册BeanDefinition的阶段才真正执行,类级别的条件早在解析类时就被过滤掉了。这种边角知识,面试官不一定问,但你在排查“为什么我改了依赖,自动配置却没生效”这类问题时,能救命。可你翻遍博客,背熟了。

2501_90410679的博客 8

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

springboot白话总结

文章目录1.springboot到底是个啥1.1假如你是县长1.2假如你是市长1.3假如你是省长1.4我理解的springboot2.springboot的原理2.1举个例子--在省长带领下创建欢迎网站2.1.1新建项目2.1.2指定页面显示内容2.1.3启动项目打开网址2.2springboot原理3.springboot的应用3.1在哪儿配置3.1.1全局配置文件3.1.2指定配置文件3.1....

weixin_44473902的博客 1563

SpringBoot 自动装配原理 & 自定义一个 starter

SpringBoot 项目的 pom.xml 文件通过 parent 模块加载配置文件和插件,并依赖 dependencies 模块管理依赖版本,避免了手动指定版本。resources 标签采用顺序合并策略,分别处理配置文件和其他资源文件,确保配置文件的动态替换和其他资源的原样复制。启动器(如 spring-boot-starter-web)简化了依赖管理,主程序通过 @SpringBootApplication 注解启动应用。@SpringBootApplication 是复合注解,包含 @SpringB

sco5282的博客 1374

SpringBoot中初始化Tomcat以及Tomcat运行原理

SpringBoot的创造简化了我们创建项目和运行项目的工作。我们不必再像SpringMVC时代那样,将项目先打包成jar包,然后放入Tomcat中再启动。我们可以忽略打包的操作和tomat的配置问题,编写完代码后直接启动项目即可。这一切都得益于SpringBoot的内置容器的实现。那么,SpringBoot具体是如何为我们完成了初始化Tomcat 的这一系列的操作的呢?下面我将以第一人称的学习源码视角带领大家来一起快乐分析SpringBoot的源码来学习下…

meser88的博客 614

SpringBoot 做毕设难吗?从效率提升视角看快速开发实践

最近在帮学弟学妹看毕业设计,发现一个挺普遍的现象:大家知道 SpringBoot 好,都说用它开发快,但真上手做毕设时,还是会被各种问题卡住,效率反而提不上来。今天我就结合自己的经验,从“效率提升”这个核心目标出发,聊聊怎么用 SpringBoot 真正高效地完成毕设。

2600_94959852的博客 878

SpringBoot启动原理

main() ↓ SpringApplication.run() ↓ 创建 ApplicationContext ↓ 加载 Environment(配置中心 / yml / 变量) ↓ 执行自动装配(EnableAutoConfiguration) ↓ 扫描并实例化 Bean ↓ 创建内嵌 Tomcat ↓ 注册 DispatcherServlet ↓ 启动端口监听 ↓ 应用就绪(ApplicationReadyEvent)三、自动装配原理(Spring Boot 的灵魂)四、完整启动时序图(工程级视角)

m0_46995061的博客 610

别再只配messages文件了!深入SpringBoot国际化:LocaleResolver、MessageSource与自动配置的奥秘

本文深入解析SpringBoot国际化机制,从LocaleResolver的语言决策到MessageSource的消息管理,再到自动配置的奥秘。通过实战代码展示如何定制国际化策略,优化性能并解决常见问题,帮助开发者超越基础的messages.properties配置,实现高效、灵活的国际化方案。

weixin_30952535的博客 432

springboot 原理梳理

csdn上关于springboot 的原理也是多如牛毛,这里还是再次梳理下这个,说是新瓶装旧酒也是可以的,只是记录下从自己角度看到的这个理解。

时光钟摆 427

SpringBoot启动流程深度解析:从自动配置到内嵌Web服务器

SpringBoot作为Java领域主流的微服务框架,其核心原理在于通过自动配置机制简化了传统Spring应用的繁琐配置。自动配置基于条件注解和SPI机制,能够根据类路径依赖和环境变量智能加载所需的Bean定义,实现了"约定大于配置"的开发理念。这一机制显著提升了开发效率,减少了样板代码,使得开发者能够快速构建独立运行的、生产级别的应用。在Web应用场景中,SpringBoot通过内嵌的Servlet容器(如Tomcat)实现了应用的独立部署与运行。本文将从源码层面深入剖析SpringBoot的启动流程,详

weixin_33423874的博客 208

SpringBoot运行原理

1.SpringBoot的运行原理 SpringBoot是如何启动的呢? @Configuration 和 @Component的区别 参考: Spring @Configuration 和 @Component 区别(精简汇总版)

Nyima_langka的博客 204

springboot基于非遗传承保护视角下的微信小程序

摘 要随着当代信息科学技术的飞速发展,基于非遗传承保护视角下的微信小程序是一种创新的技术应用,通过结合非物质文化遗产的传承与保护工作,为用户提供一个便捷的平台。该小程序将以多媒体形式展示文化遗产、传承名家、教育资源、活动信息、通知公告、留言反馈等功能,用户可以通过文化遗产、传承名家、教育资源来了解非遗项目的背景和特点。该小程序还将提供非遗项目的实地参观和体验活动的预约服务,让用户能够亲身感受非遗项目的魅力。用户还可以通过小程序参与非遗项目的传统手工制作,体验其中的乐趣与技巧。

2401_86117023的博客 1635
下一篇: AOP使用案例----公共字段填充
码破苍穹ovo
博客等级 码龄2年 377粉丝 114原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值