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

说说SpringBoot自动配置原理

Spring Boot的自动配置原理可以概括为:通过读取jar包中的配置信息,并根据项目依赖和条件注解自动配置应用程序所需的bean,从而减少手动配置的工作量。

第一、代码入口

@SpringBootApplication
👇
@EnableAutoConfiguration
👇
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
//这里面@Import引入了AutoConfigurationImportSelector

第二、自动配置类路径
AutoConfigurationImportSelector会加载META-INF/spring.factories文件,这个文件里面配置了大量的自动配置类。
不过呢,SpringBoot3.x以后自动配置类就不放在spring.factories中了,
而是放在下面这个文件下

org.springframework.boot.autoconfigure.AutoConfiguration.imports

第三、配置类生效条件
那是不是不管三七二十一,都给它创建出来呢?当然不是!

自动配置类通常包含@Conditional注解来指定在什么条件下应该自动配置。
@ConditionalOnClass 意思是当某个类在类路径上时就生效,也就是当然加了redis的相关依赖包后,就会自动配置这个里面的@Bean内容。

第四、源码跟踪

SpringApplication.run
👇
SpringApplication.createApplicationContext
👇
SpringApplication.load
👇
SpringFactoriesLoader.loadFactoryNames
👇
AutoConfigurationImportSelector.selectImports

在AutoConfigurationImportSelector内部:
在selectImports方法内部,AutoConfigurationImportSelector会加载spring.factories文件,并基于条件注解(如@ConditionalOnClass、@ConditionalOnProperty等)来过滤和选择需要自动配置的类。

http://www.lryc.cn/news/345261.html

相关文章:

  • bash: docker-compose: 未找到命令
  • linux 权限和权限的设置
  • 基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。
  • springboot3项目练习详细步骤(第一部分:用户业务模块)
  • 推荐算法顶会论文博客笔记合集
  • DRM/RESP无法连接linux上redis的原因
  • vim怎么选中多行后在头部插入#(随手记)
  • Objective-C的对象复制与拷贝选项
  • HTML5 中的离线缓存机制,即应用缓存(Application Cache 或 AppCache)已被废弃并正在被逐步移除
  • vue3+ant design实现表格数据导出Excel
  • VBA_NZ系列工具NZ06:VBA创建PDF文件说明
  • Git === Git概述 Git安装
  • Linux diff命令(比较两个文件或目录的内容差异)
  • 从传统到现代:水表的远程抄表革命
  • 视频怎么打水印?6个软件教你快速进行视频水印制作
  • 面试 Java 基础八股文十问十答第二十八期
  • Excel-VBA报错01-解决方法
  • php利用阿里云短信SDK实现短信发送功能
  • 承装(修、试)电力工程施工许可证四级资质可以承接多大的项目?
  • 影像图层调整图像显示效果的色彩参数汇总
  • EasyHPC - PyTorch入门教程【笔记】
  • Node.js里面 Path 模块的介绍和使用
  • 【Linux】Centos7配置JDK
  • pytorch中统计一个数在tensor中出现了几次
  • a-auto-complete 请求后端数据做模糊查询,解决下拉框选择选不上,不回显的问题
  • Leetcode—724. 寻找数组的中心下标【简单】
  • C语言 | Leetcode C语言题解之第72题编辑距离
  • AI视频教程下载:零代码创建AI智能体、AI Agents和ChatGPT的Gpts
  • 汽车之家,如何在“以旧换新”浪潮中大展拳脚?
  • 图神经网络(GNNs)在时间序列分析中的应用