Spring Boot的自动配置

Spring Boot面试杀手锏————自动配置原理 引言 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外,如今的各行各业都在飞速的拥抱这个已经不是很新的Spring启动框架。 当然,作为Spring Boot的精髓,自动配置原理的工作过程往往只有在“面试”的时候才能用得上,但是如果在工作中你能够深入的理解Spring Boot的自动配置原理,将无往不利。 Spr... 阅读详情

在教程《@SpringBootApplication注解》中讲到 @EnableAutoConfiguration 可以借助 SpringFactoriesLoader 这个特性将标注了 @Configuration 的 JavaConfig 类“一股脑儿”的汇总并加载到最终的 ApplicationContext,不过,这其实只是“简化版”的说明。

实际上,基于 @EnableAutoConfiguration 的自动配置功能拥有更加强大的调控能力,通过配合比如基于条件的配置能力或者调整加载顺序,我们可以对自动配置进行更加细粒度的调整和控制。

基于条件的自动配置

基于条件的自动配置来源于 Spring 框架中“基于条件的配置”这一特性。在 Spring 框架中,我们可以使用 @Conditional 这个 Annotation 配合 @Configuration 或者 @Bean 等 Annotation 来干预一个配置或者 bean 定义是否能够生效,其最终实现的效果或者语义类似于如下伪代码:

if(符合 @Conditional 规定的条件){
    加载当前配置(enable current Configuration)或者注册当前bean定义;
}

要实现基于条件的配置,我们只要通过 @Conditional 指定自己的 Condition 实现类就可以了(可以应用于类型 Type 的标注或者方法 Method 的标注):

@Conditional({MyCondition1.class, MyCondition2.class, ...})

最主要的是,@Conditional 可以作为一个 Meta Annotation 用来标注其他 Annotation 实现类,从而构建各色的复合 Annotation,比如 SpringBoot 的 autoconfigure 模块就基于这一优良的革命传统,实现了一批 Annotation(位于 org.springframework.boot.autoconfigure.condition 包下),条件注解如下:

  • @ConditionalOnBean:当容器里有指定的 Bean 的条件下。
  • @ConditionalOnClass:当类路径下有指定的类的条件下。
  • @ConditionalOnExpression:基于 SpEL 表达式作为判断条件。
  • @ConditionalOnJava:基于 JVM 版本作为判断条件。
  • @ConditionalOnJndi:在 JNDI 存在的条件下查找指定的位置。
  • @ConditionalOnMissingBean:当容器里没有指定 Bean 的情况下。
  • @ConditionalOnMissingClass:当类路径下没有指定的类的条件下。
  • @ConditionalOnNotWebApplication:当前项目不是 Web 项目的条件下。
  • @ConditionalOnProperty:指定的属性是否有指定的值。
  • @ConditionalOnResource:类路径是否有指定的值。
  • @ConditionalOnSingleCandidate:当指定 Bean 在容器中只有一个,或者虽然有多个但是指定首选的 Bean。
  • @ConditionalOnWebApplication:当前项目是 Web 项目的条件下。

有了这些复合 Annotation 的配合,我们就可以结合 @EnableAuto-Configurationn 实现基于条件的自动配置了。

SpringBoot 能够风靡,很大一部分功劳需要归功于它预先提供的一系列自动配置的依赖模块,而这些依赖模块都是基于以上 @Conditional 复合 Annotation 实现的,这也意味着所有的这些依赖模块都是按需加载的,只有符合某些特定条件,这些依赖模块才会生效,这也就是我们所谓的“智能”自动配置。

调整自动配置的顺序

在实现自动配置的过程中,除了可以提供基于条件的配置,我们还可以对当前要提供的配置或者组件的加载顺序进行相应调整,从而让这些配置或者组件之间的依赖分析和组装可以顺利完成。

我们可以使用 @org.springframework.boot.autoconfigure.AutoConfigureBefore 或者 @org.springframework.boot.autoconfigure.AutoConfigureAfter 让当前配置或者组件在某个其他组件之前或者之后进行,比如,假设我们希望某些 JMX 操作相关的 bean 定义在 MBeanServer 配置完成之后进行,那么我们就可以提供一个类似如下的配置:

@Configuration
@AutoConfigureAfter(JmxAutoConfiguration.class)
public class AfterMBeanServerReadyConfiguration {
    @AutoWired
    MBeanServer mBeanServer;
    //通过 @Bean 添加必要的 bean 定义
}

至此,我们对 SpringBoot 的核心组件完成了基本的剖析,综合来看,大部分的东西都是 Spring 框架背后原有的一些概念和实践方式,SpringBoot 只是在这些概念和实践方式上对特定的场景实现进行了固化和升华,而也恰恰是这些固化让我们开发基于 Spring 框架的应用更加方便高效。


更多优质文章请关注我的微信公众号【海慕课】,回复“资源”、“架构”、“简历”等关键词,可以领取海量优质的视频学习资源。大家共同进步。

Spring Boot 自动配置 Spring Boot 的自动配置机制极大地简化了 Spring 应用的开发过程,使得开发者能够专注于业务逻辑的实现,而不必花费大量时间在配置上。通过本文的讲解,你应该已经掌握了 Spring Boot 自动配置的基本原理和实际应用方法。希望这些知识能够帮助你在实际项目中更好地利用 Spring Boot 的强大功能。 阅读详情

相关推荐

[Spring Boot] 3. Spring Boot实现自动配置的基础

在第一篇文章介绍Spring Boot启动过程,提到了Spring Boot的核心能力 - 自动配置。这个能力也是Spring Boot非常大的卖点之一。对这个能力,相信很多同学都会比较好奇,Spring Boot是如何实现它的呢?但是在详细探究Spring Boot是如何实现自动配置之前,首先需要明确问题的来源是什么,以及了解目前Spring框架中提供的相关能力。引子问题是什么Spring中纷繁复

不忘初心,好好沉淀 4878

【Spring Boot】自动配置源码解析

定义需要自动装配的类信息:@Configuration、@Bean,Spring Boot 配置类。设置自动配置条件依赖:@Conditional。将外部配置文件读取并封装成 Bean,让配置类读取参数:@EnableConfigurationProperties、@ConfigurationProperties。实现 Bean 的发现与加载:@EnableAutoConfiguration、@Import。

smile_sundays的博客 6261

[Spring Boot] 4. Spring Boot实现自动配置的原理

入口注解类@EnableAutoConfiguration@SpringBootApplication注解中包含了自动配置的入口注解:@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration

不忘初心,好好沉淀 1万+

【Spring】Spring Boot 自动配置

SpringBoot自动配置原理是面试中的高频问题。自动配置通过@EnableAutoConfiguration实现,核心机制是AutoConfigurationImportSelector扫描META-INF/spring.factories中的配置类,配合@Conditional条件注解实现按需加载。开发者只需引入starter依赖,SpringBoot就会自动配置相关组件,极大简化了配置工作。文章还演示了如何自定义一个线程池starter,包括创建自动配置类并注册到spring.factories中。

小七的博客 926

14. Spring Boot的自动配置

SpringBoot 能够风靡,很大一部分功劳需要归功于它预先提供的一系列自动配置的依赖模块,而这些依赖模块都是基于以上 @Conditional 复合 Annotation 实现的,这也意味着所有的这些依赖模块都是按需加载的,只有符合某些特定条件,这些依赖模块才会生效,这也就是我们所谓的“智能”自动配置。在实现自动配置的过程中,除了可以提供基于条件的配置,我们还可以对当前要提供的配置或者组件的加载顺序进行相应调整,从而让这些配置或者组件之间的依赖分析和组装可以顺利完成。

muLanlh的博客 1289

Spring boot面试题---- Spring Boot 自动配置的原理

Spring boot面试题---- Spring Boot 自动配置的原理。

qq_38737545的博客 3585

【Spring Boot】Spring Boot 自动配置原理 图文并茂

为了方便测试,自定义了一个SprongBootStarter org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.sgg.aopcache.cache.conf.RedissonAotoConfiguration 1.@SpringBootApplication 核心注解 注解的元信息 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Docum.

纸上得来终觉浅,绝知此事要躬行 5216

车企常用架构、通信设计、需求管理工具全汇总

车辆技术是个系统工程,比较大,需要多人协作。“协作”往往需要工具参与,才能保证协作过程的高效、有条不紊。 【文章系转载,出处见图片水印】 今天我们就来捋一捋汽车行业常用的架构、网络开发工具~ Preevision 大名鼎鼎的Preevision,来自大名鼎鼎的Vector。 个人觉得,它是Vector公司最牛逼、最神秘、最高高在上的产品,犹如空谷回响、千里传音,但是很少看到它真正落地。 它最引以为傲的,或许是在给客户做介绍的时候,说“我们甚至能够精确到每一根线束的长度”,但是反观.

MaveDiao的博客 3483

Spring Boot自动配置原理

Spring Boot自动配置原理 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。它使用“习惯优于配置”的理念可以让你的项目快速运行部署。使用Spring Boot可以不用或者只需要很少的Spring配置。 Spring Boot核心的功能就是自动配置。它会根据在类路径中的jar、类自动配置Bean,当我...

Usher_Ou的博客 8692

C++继承与多态 - 继承多态原理01

C++继承多态原理讲解

大秦坑王的专栏 2975

Transformer凭什么取代RNN?深入拆解自注意力机制与梯度消失问题的终极对决

本文深入探讨了Transformer如何通过自注意力机制解决RNN的梯度消失问题,成为自然语言处理领域的新标准。通过对比RNN和Transformer的架构差异,揭示了自注意力机制在并行计算、长期依赖处理等方面的技术优势,并提供了实际任务中的性能对比数据。

f6g7h8i9j的博客 190

Spring Boot 自动配置原理详解

的原则,根据项目依赖和上下文环境自动配置应用程序。:根据类路径、Bean存在性、配置属性等条件决定是否启用配置。:简化依赖管理和自动配置的整合。优先使用自动配置,必要时通过自定义 Bean 覆盖。编写自动配置类并使用条件注解控制生效逻辑。通过条件注解精确控制配置类的生效条件。Spring Boot 自动配置通过。,负责加载所有自动配置类。),筛选出符合条件的配置类。:触发自动配置的加载流程。定义的优先级加载配置类。参数,输出条件评估详情。键下的所有自动配置类。模式分析配置加载过程。

qq_62112907的博客 2632

SAP 业务技术平台(BTP) Workflow(工作流)功能介绍

这背后其实发生了很多事情:Workflow 应用里 Determine Equipment Service Task 得到执行,通过 HTTP POST,消费部署在 SAP BTP 上的 Business Rules Service,后者根据我们在 Start New Instance 里传入的 Sample Data,返回自动决定出的设备明细。关于这个 SAP BTP 开发工具的更多介绍,参考我的文章:SAP 新一代全栈开发工具:SAP Business Application Studio.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 8752

Spring Boot自动配置原理解析

在常规的SSM项目中,通常需要用户自己去进行Spring、Spring MVC、Mybatis的整合,以及Tomcat的配置。的依赖,在中就已经完成了Spring、Spring MVC、Tomcat的整合,通常被称为自动配置。而完成自动配置的关键,在于启动类上的注解:是一个复合注解,其中包含了和Spring Boot的@SpringBootConfiguration:标记当前类是配置类,并且将当前类加入Spring 容器。

西岭千秋雪的博客 1428

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7745

【具身智能】感知 × 决策 × 执行:一个智能体的认知闭环怎么搭?

构建一个真正能在现实世界中运作的具身智能体,并不是简单地拼接“视觉 + 控制器 + 动作模块”就能完成的,它必须是一个**认知闭环结构**:能感知环境、理解状态、制定策略、执行动作,并从结果中学习反馈。 本讲将深入剖析具身智能的三大核心支柱:**感知系统、决策系统、执行系统**,并解析它们如何协同构建出一个“能观察、能思考、能行动”的智能体。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3261

Spring Boot 自动配置原理

创建一个自动配置类,并使用注解实现条件化配置:​@BeanSpring Boot 的自动配置通过和实现。自动配置类通过注解实现条件化配置。自动配置的核心是文件,它定义了所有自动配置类。开发者可以通过自定义自动配置类扩展 Spring Boot 的功能。通过理解自动配置的原理,开发者可以更好地掌握 Spring Boot 的工作机制,并能够根据需求进行定制化开发。

Azraelkaxi的博客 1244

李航《统计学习方法》课后习题答案(第2版)

李航《统计学习方法》课后习题答案(第2版) 章节 链接 第1章 统计学习及监督学习概论 点击进入 第2章 感知机 点击进入 第3章 k近邻法 点击进入 第4章 朴素贝叶斯法 点击进入 第5章 决策树 点击进入 第6章 逻辑斯谛回归与最大熵 点击进入 第7章 支持向量机 点击进入 第8章 提升方法 点击进入 第9章 EM算法及其推广 点击进入 第10章 隐马尔可夫模型 点击进入 第11章 条件随机场 点击进入     也可进入我的个人主页查看分类专栏

weixin_43646592的博客 2万+

Spring Boot自动配置原理详解

技术组件核心功能工作原理启用自动配置导入AutoConfigurationImportSelector选择要导入的配置实现ImportSelector接口,返回需要导入的类名数组Spring Factories机制配置发现机制通过META-INF/spring.factories文件定位配置类条件注解配置条件判断@ConditionalOnXXX系列根据条件决定是否应用配置自动配置排序控制配置加载顺序通过@AutoConfigureOrder控制优先级属性绑定外部化配置。

m0_73889530的博客 1241

一个 ABAP 工具,能打印系统里某个用户对 BSP 应用的浏览历史记录

只要一个用户在 SAP ABAP 系统里浏览过 BSP 页面,会留下浏览历史记录。本工具会解析出这些记录,打印出该用户浏览的历史事件,和浏览过的页面名称。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 545

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring Boot——自动配置

本文详细介绍了Spring框架中bean的多种加载方式及其控制机制。首先,通过XML和注解方式声明bean,包括使用@Component及其衍生注解、@Bean注解等。其次,探讨了扩展初始化、加载配置类、使用@Import注解、实现ImportSelector和ImportBeanDefinitionRegistrar接口等高级加载方式。此外,还介绍了bean加载控制,包括编程式和注解式匹配环境加载bean,以及通过属性配置解耦业务bean。最后,深入分析了SpringBoot自动配置的原理,包括@Spri

2301_81283571的博客 2056

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: SpringApplication.run执行流程详解
下一篇: spring-boot-starter-web和快速Web应用开发
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值