SpringBoot自动配置原理!

SpringBoot自动配置原理,面试高频! SpringBoot自动配置 我们都知道一个SpringBoot主配置类只要标注上@SpringBootApplication的注解,Spring就会帮我们自动配置各个组件和实例化Bean,我们来通过源码分析一下SpringBoot自动配置原理。 首先我们要知道,SpringBoot将符合条件的@Configuration类都加载到Spring容器中,就像一只八爪鱼,我们的启动类就是一个典型的@... 阅读详情

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

回顾前面Spring的文章(以学习的顺序排好):

作为一名Java程序员,就不可能不了解SpringBoot,如果不了解(赶紧学!)

一、SpringBoot的自动配置原理

不知道大家第一次搭SpringBoot环境的时候,有没有觉得非常简单。无须各种的配置文件,无须各种繁杂的pom坐标,一个main方法,就能run起来了。与其他框架整合也贼方便,使用EnableXXXXX注解就可以搞起来了!

所以今天来讲讲SpringBoot是如何实现自动配置的~

1.1三个重要的注解

我们可以发现,在使用main()启动SpringBoot的时候,只有一个注解@SpringBootApplication

640?wx_fmt=png
只有一个@SpringBootApplication注解

我们可以点击进去@SpringBootApplication注解中看看,可以发现有三个注解是比较重要的:

640?wx_fmt=png
SpringBootApplication注解详情

所以,Java3yApplication类可以被我们当做是这样的:

@SpringBootConfiguration@EnableAutoConfiguration@ComponentScanpublic class Java3yApplication {    public static void main(String[] args) {        SpringApplication.run(Java3yApplication.class, args);    }}
@EnableAutoConfiguration
@ComponentScan
public class Java3yApplication {

    public static void main(String[] args) {
        SpringApplication.run(Java3yApplication.class, args);
    }
}

1.2重点EnableAutoConfiguration

我们知道SpringBoot可以帮我们减少很多的配置,也肯定听过“约定大于配置”这么一句话,那SpringBoot是怎么做的呢?其实靠的就是@EnableAutoConfiguration注解。

简单来说,这个注解可以帮助我们自动载入应用程序所需要的所有默认配置。

介绍有一句说:

if you have tomcat-embedded.jar on your classpath you are likely to want a TomcatServletWebServerFactory

如果你的类路径下有tomcat-embedded.jar包,那么你很可能就需要TomcatServletWebServerFactory

我们点进去看一下,发现有两个比较重要的注解:

640?wx_fmt=png
EnableAutoConfiguration注解详情

1.2.1AutoConfigurationPackage

网上将这个@AutoConfigurationPackage注解解释成自动配置包,我们也看看@AutoConfigurationPackage里边有什么:

640?wx_fmt=png
AutoConfigurationPackage注解实现

我们可以发现,依靠的还是@Import注解,再点进去查看,我们发现重要的就是以下的代码:

@Overridepublic void registerBeanDefinitions(AnnotationMetadata metadata,        BeanDefinitionRegistry registry) {    register(registry, new PackageImport(metadata).getPackageName());}
public void registerBeanDefinitions(AnnotationMetadata metadata,
        BeanDefinitionRegistry registry)
 
{
    register(registry, new PackageImport(metadata).getPackageName());
}

在默认的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。

我开始也有这个疑问,直到我看到文档的这句话:

it will be used when scanning for code @Entity classes.
It is generally recommended that you place EnableAutoConfiguration (if you're
not using  @SpringBootApplication) in a root package so that all sub-packages
and classes can be searched.

比如说,你用了Spring Data JPA,可能会在实体类上写@Entity注解。这个@Entity注解由@AutoConfigurationPackage扫描并加载,而我们平时开发用的@Controller/@Service/@Component/@Repository这些注解是由ComponentScan来扫描并加载的。

1.2.2回到Import

我们回到@Import(AutoConfigurationImportSelector.class)这句代码上,再点进去AutoConfigurationImportSelector.class看看具体的实现是什么:

640?wx_fmt=png
得到很多配置信息

我们再进去看一下这些配置信息是从哪里来的(进去getCandidateConfigurations方法):

640?wx_fmt=png
通过SpringFactoriesLoader来加载

这里包装了一层,我们看到的只是通过SpringFactoriesLoader来加载,还没看到关键信息,继续进去:

640?wx_fmt=png
跟踪实现

简单梳理:

640?wx_fmt=png
从Properties对象获取到EnableAutoConfiguration.class对应的值,然后添加到容器里边

最后我们会默认加载113个默认的配置类:

640?wx_fmt=png

有兴趣的同学可以去翻一下这些文件以及配置类哦:

640?wx_fmt=png
加载的配置类和文件的信息

官网文档参考:

英语不好的同学可以像我一样,对照着来看:

640?wx_fmt=png
一边插件,一边原文

1.3总结

@SpringBootApplication等同于下面三个注解:

其中@EnableAutoConfiguration是关键(启用自动配置),内部实际上就去加载META-INF/spring.factories文件的信息,然后筛选出以EnableAutoConfiguration为key的数据,加载到IOC容器中,实现自动配置功能!

640?wx_fmt=png
自动配置功能

最后

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

640?wx_fmt=jpeg
帅的人都关注了

精彩回顾:

觉得我的文章写得不错,不妨点一下好看并分享给朋友!




基于HPM5E00的EtherCAT从站开发实战:从硬件解析到软件调试 实时工业以太网通信是工业自动化与运动控制领域的核心技术,它通过硬件与协议栈的协同,实现了微秒级的高确定性数据交换。其技术价值在于为多轴同步、机器人控制等复杂场景提供了高实时性、高同步精度的通信基础。在应用场景上,广泛服务于数控机床、包装机械、半导体设备等高端制造领域。本文聚焦于EtherCAT从站开发,深入解析了基于先楫HPM5E00高性能MCU与专用从站控制器(ESC)的硬件架构设计,并详细阐述了开源协议栈SOES的移植、对象字典配置以及过程数据(PDO)映射等核心软件实践,为开发者快速构建稳定可靠的实时 阅读详情

相关推荐

【数字电源/MATLAB+PLECS】如何进行 Buck 数字电源仿真(二)PLECS 搭建开环 Buck 功率级

本文介绍了如何在PLECS中搭建开环Buck功率级模型,验证数字电源设计的基本思路。重点内容包括: 明确开发顺序:先开环验证功率级,再闭环设计控制器 搭建关键组件:输入电源、PWM模块、MOSFET开关、续流二极管、LC滤波电路及负载 设置初始参数:24V输入、12V输出、200kHz开关频率、22μH电感、100μF电容 测量关键波形:MOSFET Vds验证开关动作、电感电流纹波和输出电压稳态值 提供完整仿真模型和GitHub资源,便于读者复现验证 文章强调通过开环测试先确保功率级正确性,为后续闭环控制

weixin_43234123的博客 1218

Spring Boot注解的运行原理

Spring Boot注解的运行原理

Smile的博客 2914

MAX3232芯片引脚功能详解与外围电路设计避坑指南(从电荷泵到静电防护)

本文详细解析了MAX3232芯片的引脚功能与外围电路设计,重点介绍了其电荷泵架构和RS232通信接口的应用。通过实际案例和参数对比,提供了电路设计中的常见问题解决方案和静电防护建议,帮助工程师优化工业控制与嵌入式系统中的通信可靠性。

weixin_30596165的博客 433

springboot注解及原理详解

7.默认参数的key名称是方法里的参数名称,但通过@RequestParam可以自定义另外一个,因为在某些条件下,方法名称固定下来不可以修改了,但请求的参数又需要通过另外一个参数key名称来传递,这样就可以通过这样的方式来实现。6.@RequestParam还可以在参数为空的情况下,为我们设置一个参数的默认值,如图所示,可以看出来,没有参数的情况下,获取到的就是默认值。2.通过idea工具启动web项目,然后通过浏览器访问测试效果,不带参数则获取的参数为null,但页面可以正常显示,请求可以正常的执行。

m0_61346425的博客 4461

千兆以太网 PCB 设计实战:4层板 100Ω 差分对布线,EMI 降低 6dB 实测

本文详细解析了千兆以太网 PCB 设计中的关键技术与实战经验,重点介绍了4层板上100Ω差分对的优化布线方法,通过实测数据展示了EMI降低6dB的有效方案。内容涵盖层叠设计、阻抗计算、布线技巧及EMI抑制措施,为硬件工程师提供了一套完整的高速电路设计解决方案。

weixin_29175469的博客 426

晶振匹配电容容值计算方法

在使用晶振时,应仔细参考晶振规格书,以确保正确选择匹配电容,从而获得稳定和精准的时钟源。

aidi1111的博客 4653

SpringBoot的核心注解及自动配置原理

SpringBoot的自动配置原理是一个令人头疼的问题,经过一下午的学习写下这篇文章供大家参考,如果有雷同纯属巧合。文章中如果出现错误,欢迎大家指出,本人会随时修改。2.7.5(注意版本号,不然跟文章中调试结果可能不一致)。SpringBoot中的核心注解是@SpringBootApplication,不过该注解是一个合成注解,主要是由@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan等三个注解组成。

m0_73845616的博客 3500

相机光学(三十八)——VCM(Voice Coil Motor)音圈马达

VCM(Voice Coil Motor)音圈马达全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。弹片式结构滚珠式结构摩擦式结构Open loop开马达Close loop闭环马达。

图像学习之旅 7222

从注解入手理解springboot原理

从注解入手理解springboot原理

eternal_tc的博客 1107

【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?

如何查看 WPS 的输入静态地理数据(二进制格式)?

WW、forever的博客 633

PCL 计算点云包围球【2025最新版】

包围球通常用于简单排斥,因为与球体相交的方程很简单,同样重要的是,旋转一个球体并不会改变其范围。因此,当包围球用于简单排斥时,如果球体中心是对象的原点,则可以忽略对象的方向。

点云侠的博客 2068

SpringBoot自动配置原理详解

SpringBoot 的核心:自动配置原理详解

真滴不可理喻的博客 1万+

大模型风电功率预测:短期,超短期,中长期的完整实现与代码详解

本文全面介绍了基于深度学习大模型的风电功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)三种时间尺度。文章详细阐述了数据准备与特征工程,包括数据收集、预处理和可视化分析。针对不同时间尺度,分别介绍了Temporal Fusion Transformer (TFT)、Informer和N-BEATS模型的构建、训练与评估方法,并提供了完整的开源代码实现。此外,文章还探讨了模型部署与生产环境集成,包括模型保存与加载、实时预测API以及模型监控与再训练。最后,文章总结了关键创新

专注AI大模型,软件混淆,授权 1890

SpringBoot的自动配置原理!

什么是Spring Boot呢?Spring Boot 是 Pivotal 团队研究开发的一款基于 Spring 框架的开源 Java 开发框架,它的核心目标是简化 Spring 应用的初始搭建和开发过程。Spring Boot 多用于开发微服务、RESTful API、Web 应用等,是目前 Java 后端开发中非常流行的框架之一。

2401_85973273的博客 1190

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

抽丝剥茧!一文搞清Spring Boot自动配置原理!

​当我们启动一个 Spring Boot 应用时,一切都从主类上的 @SpringBootApplication 注解开始。 这个注解看起来简单,但它其实是一个复合注解,是三个核心注解的集合体: @SpringBootConfiguration:这其实就是 @Configuration 的一个变体。它将当前类标记为一个配置类,意味着 Spring 容器会从这个类开始扫描和加载 Bean。 @ComponentScan:这个注解告诉 Spring 去哪里扫描用户自定义的组件(如 @Component, @

qq_65441028的博客 2098

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

springboot 注解详解_SpringBoot自动配置原理!

SpringBoot启动main()做了什么?点击上方“linkoffer”,选择关注公众号高薪职位第一时间送达前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y作为一名Java程序员,就不可能不了解SpringBoot,如果不了解(赶紧学!)一、SpringBoot的自动配置原理不知道大家第一次...

weixin_39750854的博客 309

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

一文搞懂 SpringBoot 自动配置原理!

一文搞懂 SpringBoot 自动配置原理!

2403_88996764的博客 903

SpringBoot如何扩展引入的组件,以及如何自动配置原理!

大家都知道,当我们创建SpringBoot项目之后,我们可以在pom文件下,引入我们想要启动的组件,当我们引入之后,SpringBoot会自动帮我们配置属性! 下面我们以SpringBoot引入SpringMvc组件为例,其他组件也是相似 当我们开启SpringMvc组件之后,SpringBoot会默认帮我们吧SpringMvc配置完成,那么他是如何配置的呢? 当我们开启SpringMvc之后,SpringBoot就会帮我们导入SpringMvc所需要的依赖,同时会有一个WebMvcAutoC.

weixin_46437360的博客 707

一文通透Spring Boot自动配置:从原理到实战,小白也能变大佬!

还在为Spring项目繁琐的XML和Java配置头疼?Spring Boot的自动配置黑科技,让你真正做到开箱即用!本文将手把手拆解自动配置的核心机制,揭秘“零配置”背后的秘密,附带超实用调试技巧!

weixin_42148384的博客 1239

浅谈【SpringBoot】 自动配置底层原理!

SpringBoot框架之所以如此好用,源于其提供了两个非常重要的功能:起步依赖和自动配置。

zeal511的博客 432

【SpringBoot】深入源码理解SpringBoot自动配置原理——第二讲:强大的自动配置类!

文章目录引入spring.factories自动配置类工厂xxxAutoConfiguration自动配置类xxxProperties自动配置属性面试场景   引入 入口类的第一个切口,即注解,我们已经弄明白了。三个注解的作用分别是声明该类是配置类以被扫描到、自动配置组件、进行包的扫描。 我们已经向SpringBoot自动配置原理走近了一小步。不要着急,先来思考一下,自动配置也是需要参数的,所以SpringBoot是不是存在这样一个仓库/工厂/储藏室,放着这些配置参数呢? 我们就以此为目标,进入

丧心病狂Loli控的博客 311

这样讲 SpringBoot 自动配置的原理,不信你不懂!

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!每天14:00更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细...

weixin_44421461的博客 161

告别繁琐配置!深度解析Spring Boot 自动配置原理

SpringBoot自动配置机制深度解析:本文通过剖析@SpringBootApplication注解,揭示SpringBoot自动配置的核心原理。关键发现包括:1)@EnableAutoConfiguration作为总开关,通过AutoConfigurationImportSelector动态加载配置;2)自动配置类通过META-INF/spring.factories标准化注册,实现解耦和扩展;3)SpringFactoriesLoader机制扫描所有jar包中的配置清单。这种"约定优于配置+

zyyyyyhhhhh的博客 774

SpringBoot自动配置的原理源码级别!

1、追踪源代码起始点为入口类上的核心注解 核心注解SpringBootApplication 2、核心注解的解释 3、关注@EnableAutoConfiguration注解 4、@Import注解中到底将那些类交由工厂管理 5、找到list返回的信息 6、通过类路径下的meta-info/spring.factoies获取类相关信息 7、找到meta-info/spring.factoies org.springframework.boot.spring-boot-autoconfigure/

冰蛙 336

最详细 SpringBoot 自动配置原理!看完你就懂了!

SpringBoot的诞生旨在极大简化Spring框架中繁琐的XML配置过程。其本质依然是Spring框架,但引入了更为便捷的方式,使得开发者无需依赖任何XML配置即可快速启动服务。这一特性在微服务架构中尤为突出,因为它允许我们更迅速地构建和部署应用。 简而言之,SpringBoot并非全新的框架,而是通过提供一系列默认配置,简化了众多框架的使用,从而加速了开发进程。

x1ao_fe1的博客 1704

SpringBoot 自动配置实现原理:这一次一定要整明白!

你曾经想过为什么在搭建一个 Spring Boot 项目时,它似乎自带一种魔法,能够为你自动完成大量的配置工作吗?那么,这一切是如何做到的呢?今天,我们来揭开这背后的秘密。

733
上一篇: 为什么阿里巴巴禁止开发人员使用isSuccess作为变量名
下一篇: Java精美思维导图
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值