Spring Boot自动装配原理

Spring Boot 中自动装配机制的原理 可能用户还会问到如何自定义自动配置,比如编写自己的starter,这时候需要创建spring.factories文件,定义自己的AutoConfiguration类,并使用条件注解来控制Bean的创建。这也是Spring Boot扩展性的一种体现。 总结一下,我需要分步骤解释自动装配的机制,从@EnableAutoConfiguration开始,到加载spring.factories中的配置类,条件注解的作用,以及整个装配流程。同时要对比组件扫描和自动装配的不同,避免用户混淆。可能还需要提到一些常见的自动 阅读详情

一、核心入口:@SpringBootApplication 注解

Spring Boot 应用的主类通常会添加 @SpringBootApplication 注解,它是一个组合注解,主要包含以下三个关键注解:

  • @SpringBootConfiguration:继承自 @Configuration,表明该类是一个配置类,可用于定义 Bean 等配置信息。
  • @EnableAutoConfiguration:此注解是开启自动装配功能的核心,它借助 @Import 导入了 AutoConfigurationImportSelector 类,为后续自动装配流程奠定基础。
  • @ComponentScan:负责扫描指定包及其子包下带有 @Component、@Service、@Repository、@Controller 等注解的组件,并将它们注册到 Spring 容器中。

二、自动配置类的加载:AutoConfigurationImportSelector 类

@EnableAutoConfiguration 注解导入的 AutoConfigurationImportSelector 类发挥着重要作用,其核心功能如下:

  • 读取 spring.factories 文件:该类会从 META - INF/spring.factories 文件中读取自动配置类的全限定名。众多 Spring Boot 依赖模块都可在自身的 spring.factories 文件中定义自动配置类。例如,spring - boot - starter - web 依赖会定义与 Web 开发相关的自动配置类,像 WebMvcAutoConfiguration 等。
  • spring.factories 文件格式:这是一个 properties 格式的文件,以 org.springframework.boot.autoconfigure.EnableAutoConfiguration 作为键,值为逗号分隔的自动配置类全限定名列表。示例如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

三、条件筛选:@Conditional 注解及其派生注解

为了确保自动配置类在合适的条件下生效,Spring Boot 自动配置类上广泛使用了各种 @Conditional 注解的派生注解,常见的有:

  • @ConditionalOnClass:当类路径中存在指定的类时,对应的自动配置类才会被应用。例如,WebMvcAutoConfiguration 类上标注了 @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class }),意味着只有当类路径中同时存在 Servlet、DispatcherServlet 和 WebMvcConfigurer 类时,该自动配置类才会生效。
  • @ConditionalOnMissingBean:若 Spring 容器中不存在指定类型的 Bean,相应的自动配置类才会被应用。比如在数据源的自动配置类中,会检查容器中是否已存在 DataSource 类型的 Bean,若不存在则进行自动配置。
  • @ConditionalOnProperty:当指定的属性存在且满足特定条件时,自动配置类才会生效。例如,@ConditionalOnProperty(name = "spring.cache.type", havingValue = "redis") 表示只有当配置文件中存在 spring.cache.type 属性且其值为 redis 时,相关的 Redis 缓存自动配置类才会生效。

四、自动配置类的作用

自动配置类的主要职责是通过 @Bean 注解定义方法,将一些常用的组件(如 DataSource、JdbcTemplate、RestTemplate 等)配置到 Spring 容器中。开发者可根据自身需求,对这些自动配置的 Bean 进行覆盖或自定义配置。例如,DataSourceAutoConfiguration 类会依据不同的数据库连接池依赖(如 HikariCP、Tomcat JDBC 等),自动配置 DataSource Bean 并注册到 Spring 容器中,供其他组件使用。

五、总结

Spring Boot 的自动装配原理是通过 @EnableAutoConfiguration 注解触发从 spring.factories 文件加载自动配置类,再利用各种条件注解决定自动配置类是否生效,最终将常用组件配置到 Spring 容器中,从而实现应用的快速搭建和自动配置。

Spring Boot源码解析 - 自动装配原理 作为自动装配核心类,在处理@Import逻辑中触发自动装配的过程,最终获取需要导入的自动装配类集合,实现Spring Boot的自动装配功能。注解,我们可以在一个配置类中引入其他的配置类,从而将它们的Bean定义和配置合并到当前配置中。,以key-value的形式进行本地缓存,后续触发自动装配时,从本地缓存中获取自动装配类集合。后置处理器会在扫描解析启动类当前包以及子包下的配置类,并将其注册为Spring管理的。,其他部分与自动装配无关。的自动装配类集合,然后去重过滤返回需要导入的自动装配类数组。 阅读详情

相关推荐

Spring Boot 的自动装配原理

ComponentScan: 扫描包下的类中添加了@Component (@Service,@Controller,@Repostory,@RestController)注解的类 ,并添加的到spring的容器中,可以自定义不扫描某些 bean。Dubbo的SPI机制:Dubbo更是把SPI机制应用的淋漓尽致,Dubbo基本上自身的每个功能点都提供了扩展点,比如提供了集群扩展,路由扩展和负载均衡扩展等差不多接近30个扩展点。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。

qq_38667268的博客 425

Spring Boot 自动装配原理详解

自动装配是 Spring Boot 根据项目类路径(classpath)中的依赖和当前环境,动态配置 Spring 应用程序所需 Bean 的过程。它通过注解实现,通常被包含在中。核心功能:根据引入的依赖,自动加载和配置相关组件。典型场景:添加后,Spring Boot 自动配置 Tomcat 和 Spring MVC。// 文件: org.springframework.boot.autoconfigure.EnableAutoConfiguration。

error_log7的博客 2647

SAP PP后台配置实战:从BOM到工艺路线的全流程解析

本文详细解析了SAP PP模块后台配置的全流程,从BOM到工艺路线的关键步骤与实战技巧。通过分享生产计划、工作中心能力计划等核心配置经验,帮助企业优化生产管理流程,提升SAP系统实施效率。特别针对BOM配置、工艺路线设置等常见问题提供解决方案。

weixin_29300931的博客 1010

spring boot自动装配原理

springboot自动装配几乎是现在面试必问的面试题,要是逐行分析自动装配流程肯定是很复杂的,因此我们从大体上来梳理即可。

u012453843的专栏 1383

差分隐私(Differential Privacy)

差分隐私,拉普拉斯机制和高斯机制的证明

Michale_L的博客 1万+

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

最近一场面试(Spring Boot的自动装配原理及流程)

一、前言 面试官:“可不可以说一下Spring Boot的自动装配原理?” 我:“不可以。” 面试官:“滚出去!!!” 二、回顾在普通的Spring项目中的做法 在没有使用Spring Boot之前,我们需要在xml文件中进行需要用到的Bean的配置(以最常用的mybatis的使用为例)。 在使用到mybatis时,我们需要配置相关的Bean(DataSource的bean、SqlSessionFactory的bean) 而在用到Spring Boot后,我们只需要引入依赖,再加上.

心有谦谦结 1万+

视频监控设备(NVR、IPC等)如何通过国标GB28181接入到视频监控平台,以及接入过程如何测试视频接入是否成功

GB/T28181标准广泛的应用,视频监控设备通过国标GB28181接入视频监控平台的过程变成程序化、标准化的互联过程,确保了视频监控设备能够在不同系统、不同网络环境下实现远程、跨区域、跨级别的访问和控制。版本有GB28181-2011、2016、2022几个常用版本,威迪斯特的视频监控平台完全支持GB28181的这几个版本,能够实现不同品牌视频监控设备的国标视频接入(国标视频监控接入),或者为国标28181视频接入(国标28181视频监控接入),也为国标281818接入(国标GB/T28181接入。

weixin_70208651的博客 1万+

Spring boot 自动装配原理

Spring boot 自动装配原理

Java是世界上最好的语言 1481

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

高分系列卫星轨道、传感器参数等信息

遥感卫星数据简介-高分系列

中遥科 3309

Spring Boot 自动装配原理

Spring Boot自动装配原理基于约定优于配置的设计思想,通过@EnableAutoConfiguration注解触发自动配置流程。开发者可创建自定义starter,通过定义配置类和spring.factories实现扩展。整个过程体现了Spring Boot"开箱即用"的特性,大幅简化了传统Spring应用的配置工作。

无论云泥意贯一 1286

详解Xilinx FPGA高速串行收发器GTX/GTP(6)--Pattern Generator/Pattern Checker

详解Xilinx FPGA高速串行收发器GTX/GTP(6)--Pattern Generator/Pattern Checker

孤独的单刀 1626

Spring Boot自动装配原理深度解析

约定优于配置:通过默认配置减少显式配置条件化装配:根据classpath内容、环境变量等条件决定是否启用配置模块化配置:每个starter模块提供自己的默认配置当开发者添加某个starter依赖(如)时,Spring Boot会自动配置所需的Bean,而无需手动编写配置类。新建Maven项目,添加依赖:</</</创建自动配置类:@Bean添加配置属性类:创建spring.factories:在应用项目中添加依赖:</</</</

Gaomengsuanjia_的博客 953

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Spring Boot 自动装配的原理

Spring Boot自动装配1. 自动装配的原理1.1自动装配的实现1.1.1@EnableAutoConfiguration1.1.2

weixin_40718971的博客 750

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring Boot Starter 自动装配原理全解析:从概念到实践

在Spring Boot开发中,**Starter**和**自动装配**是两个核心概念,它们共同构成了“开箱即用”的开发体验。通过引入一个`Starter`依赖,开发者可以快速集成第三方组件(如Redis、MyBatis等),而无需手动配置大量Bean。这种“约定优于配置”的理念显著提升了开发效率。本文将深入解析Spring Boot Starter的自动装配原理,涵盖其核心机制、实现流程、自定义方法及最佳实践。

专注于与编程相关的知识内容分享 2470

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【SpringBoot】深入剖析 Spring Boot 自动装配原理(附源码与实战)

Bean而在 Spring Boot 中,这些 Bean可以不写,Spring Boot 会自动装配合适的 Bean。例如,添加依赖后,Spring Boot 会自动配置DataSource但我们从未在代码中显式定义它!假设我们希望 Spring Boot在项目启动时自动装配一个自定义的 HelloService,而无需手动配置 Bean,我们可以按照以下步骤实现。如果不想让某些自动配置生效,可以使用exclude或者在Spring Boot 通过和加载中的自动配置类。自动配置类使用。

工一木子 1411

Spring Boot 自动装配原理深度解析

自动装配(Auto Configuration)Spring Boot 根据当前项目的依赖、环境和配置,自动为应用配置合适的 Spring 组件。“你引什么依赖,我就帮你配什么 Bean。Spring Boot 通过 @EnableAutoConfiguration 加载自动配置类,并借助条件注解按需向容器中注册 Bean。

2401_88153531的博客 988
上一篇: java使用minio上传大文件
下一篇: 一文带你复习Redis基础命令
java烤冷面
博客等级 码龄4年 177粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值