Spring Boot 3.x:自动配置类加载机制的变化

news2025/2/26 6:01:22

随着 Spring Boot 3.x 版本的发布,Spring Boot 引入了一些关键的变更。其中最重要的一项变更是 自动配置类的加载机制。在之前的版本中,Spring Boot 使用 spring.factories 文件来管理自动配置类的加载。然而,在 Spring Boot 3.x 中,Spring Boot 引入了一个新的机制,使用 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件来替代 spring.factories 文件。

1. 旧版机制:spring.factories 文件

Spring Boot 2.x 及以下版本中,Spring Boot 使用了 spring.factories 文件来管理自动配置类的加载。这个文件位于每个依赖的 META-INF 目录下,它列出了所有需要加载的自动配置类。

一个典型的 spring.factories 文件内容可能如下:

# Spring Boot 自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
...

在应用启动时,Spring Boot 会读取这个文件,根据其中列出的配置类,自动加载相关的配置和服务。

2. 新机制:AutoConfiguration.imports 文件

Spring Boot 3.0 开始,spring.factories 文件被移除,并由新的 AutoConfiguration.imports 文件替代。新的文件路径为:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,并且该文件仅包含自动配置类的名称列表,而不再涉及配置的启用与禁用。

这种变化的一个重要好处是,Spring Boot 能够更加灵活地处理自动配置,减少了对 spring.factories 的依赖,简化了自动配置的管理。

示例 AutoConfiguration.imports 文件内容:

# 数据源相关的自动配置类
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration
...

如图所示:
在这里插入图片描述

3. 为什么进行这样的变更?

Spring Boot 3.x 的这个变更带来了一些重要的优势:

  • 简化了自动配置的管理:新的机制使得 Spring Boot 能够更加清晰、简洁地管理自动配置类的加载,不再依赖复杂的 spring.factories 文件。
  • 提高了灵活性:通过新的配置文件,Spring Boot 可以更容易地进行自动配置类的扩展、修改或替换。这个变化使得开发者可以更好地控制自动配置的行为。
  • 更易于理解:通过直接列出自动配置类,开发者可以更加直观地了解哪些类会被自动配置和加载,减少了配置复杂度。

4. 如何适应这个变更?

对于开发者来说,Spring Boot 3.x 的自动配置类加载机制变化并不需要做大的改变。你只需要关注以下几点:

  • 自动配置类的位置不变:即使文件加载机制发生了变化,自动配置类的路径仍然保持不变。例如,DataSourceAutoConfiguration 依然位于 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
  • 查看 AutoConfiguration.imports 文件:如果你希望了解 Spring Boot 启动时会加载哪些自动配置类,可以查看项目中 spring-boot-autoconfigure 相关依赖中的 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件。

5. 总结

Spring Boot 3.x 对自动配置类加载机制的变化,主要是将自动配置类的注册方式从 spring.factories 文件迁移到了 AutoConfiguration.imports 文件。这项变更使得自动配置变得更加灵活和简洁,降低了配置的复杂度。对于开发者而言,虽然底层机制发生了变化,但实际使用时不需要做太多调整,只需关注新的配置文件路径和自动配置类的名称。

随着 Spring Boot 的持续发展,了解这些变更将帮助开发者更好地利用 Spring Boot 的自动配置特性,提升应用开发效率和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

arXiv-2024 | NavAgent:基于多尺度城市街道视图融合的无人机视觉语言导航

作者:Youzhi Liu, Fanglong Yao*, Yuanchang Yue, Guangluan Xu, Xian Sun, Kun Fu 单位:中国科学院大学电子电气与通信工程学院,中国科学院空天信息创新研究院网络信息系统技术重点实验室 原文链接:NavAgent: Multi-scale Urba…

(三)PyQT5+QGIS+python使用经验——解决各版本不兼容问题

一、问题描述 基础环境:Windows10(64) PyCharm2024 QGIS 3.22。 目的:解决之前python版本多,pyqt5以及QT Designer交互使用存在环境变量冲突矛盾,以及QGIS安装时自带python、pyqt5等问题。 尤其是在QT …

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么? 2、常见的图像噪声 (1)椒盐噪声 ​编辑(2) 高斯噪声 &a…

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

快速掌握源码部署Filebeat

文章目录 1. 裸金属安装1.1 压缩包方式安装1.2 yum方式安装 2. docker安装3. K8s安装 项目使用了Filebeat,现在需要运行在ARM架构的服务器上,但是Filebeat官方没有提供,需要自己编译一份 filebeat等组件的源码地址 https://github.com/elasti…

ST-Linker V2 烧录器详解说明文档

目录 ST-Linker v2烧录器介绍 STM8烧录口 STM32烧录接口 JTAG烧录接口 ​​​​​​​ ​​​​​​​ ​​​​​​​ 编写不易,仅供学习,请勿搬运,感谢理解 ST-Linker v2烧录器介绍 图片中是两种IC芯片的烧录器&#x…

同三维TL201H2S4 4+2机手术互动录播主机产品

同三维TL201H2S4 42机手术互动录播主机产品 录制点播、直播导播、互动、音频处理器、中控等多功能为一体 6路视频输入:4路SDI1路HDMI1(4K30)1路(3选1:HDMI2/2路VGA) 2路视频输出:1路HDMI1(4K30)1路(2选1:VGA和HDMI2) 5路音频输入&#xf…

RabbitMQ实现网络分区

RabbitMQ实现网络分区 网络分区的判断应答时间范围判定方式日志方式命令查看监控页面提示API查看 模拟网络分区封禁端口封禁IP封禁网卡挂起恢复操作系统 网络分区的影响未配置镜像队列情况下已配置镜像队列情况下 处理网络分区手动处理恢复步骤挑选信任分区重启方式&#xff08…

一、LRU缓存

LRU缓存 1.LRU缓存介绍2.LRU缓存实现3.LRU缓存总结3.1 LRU 缓存的应用3.2 LRU 缓存的优缺点 1.LRU缓存介绍 LRU是Least Recently Used 的缩写,意为“最近最少使用”。它是一种常见的缓存淘汰策略,用于在缓存容量有限时,决定哪些数据需要被删…

【大前端vue:组件】鼠标上移 出现动画

【大前端vue&#xff1a;组件】鼠标上移 出现动画 <template><div class"view-introduction-culture"><div class"culture-wrapper"><h2 class"culture-title">鼠标上移&#xff1a;展示动画 显示出来</h2><di…

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题&#xff0c;它不仅会降低工作效率&#xff0c;还可能影响娱乐体验。导致电脑网速慢的原因多种多样&#xff0c;包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因&#xff0c;并提供提高电脑网速的方法。 一、检查…

快速本地化部署 OnlyOffice服务 ( Linux+Docker)

文章目录 一、OnlyOffice介绍&#x1f4d6;二、集成OnlyOffice&#x1f9e9;2.1 环境准备&#x1f5a5;️2.2 搜索镜像2.3 拉取镜像2.4 查看镜像2.5 创建容器2.6 进入容器配置2.7 重启服务2.8 添加字体字号2.9 测试OnlyOffice服务 三、在线预览office文档四、Cpolar内网穿透 一…

Leecode刷题C++之形成目标字符串需要的最少字符串数①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…

51c嵌入式~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11529950 一、不同的电平信号的MCU怎么通信 “电平转换”电路 ​ 先说一说这个电路的用途&#xff1a;当两个MCU在不同的工作电压下工作&#xff08;如MCU1 工作电压5V&#xff1b;MCU2 工作电压3.3V&#xff09;&#xf…

2024年第十五届蓝桥杯青少组C++国赛—割点

割点 题目描述 一张棋盘由n行 m 列的网格矩阵组成&#xff0c;每个网格中最多放一颗棋子。当前棋盘上已有若干棋子。所有水平方向或竖直方向上相邻的棋子属于同一连通块。 现给定棋盘上所有棋子的位置&#xff0c;如果要使棋盘上出现两个及以上的棋子连通块&#xff0c;请问…

Java线程池解读

Java 线程池是一个提供多线程管理和调度的工具&#xff0c;通常用来处理多个并发任务。线程池能够帮助有效管理线程的创建、调度、执行和销毁&#xff0c;避免频繁的线程创建和销毁&#xff0c;提高系统性能。 前言 Java 线程池是面试中的常客&#xff0c;面试官经常会问线程…

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时&#xff0c;合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数&#xff0c;以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法&#xff1a;通过工具栏编辑配置和通过服…

【CC2530开发基础篇】继电器模块使用

一、前言 1.1 开发背景 本实验通过使用CC2530单片机控制继电器的吸合与断开&#xff0c;深入了解单片机GPIO的配置与应用。继电器作为一种常见的电气控制元件&#xff0c;广泛用于自动化系统中&#xff0c;用于控制大功率负载的开关操作。在本实验中&#xff0c;将通过GPIO口…

通过解调使用正则化相位跟踪技术进行相位解包裹

1. 绪论 光学计量学通常使用光学干涉仪来测量各种物理量。1,2 根据应用的不同&#xff0c;可以使用多种类型的干涉仪&#xff0c;但它们的共同目标是产生一个由被测物理量调制的条纹图案。使用这种光束编码程序可以检测到的物理量范围非常广&#xff1a;深度测量、应变分析、温…

数字图像处理技术期末复习

1. 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&#xff1f; 题目&#xff1a; 已知图像的分辨率和深度&#xff0c;怎么求图像的存储空间&#xff08;位&#xff0c;字节&#xff0c;KB&#xff09;&a…