Java面试八股之Spring boot的自动配置原理

  1. Spring boot的自动配置原理

Spring Boot 的自动配置原理是其最吸引人的特性之一,它大大简化了基于 Spring 框架的应用程序开发。以下是 Spring Boot 自动配置的基本原理和工作流程:

1. 启动类上的注解

Spring Boot 应用通常会在主类上使用 @SpringBootApplication 注解,这是 Spring Boot 自动配置的起点。此注解是以下三个注解的组合:

@SpringBootConfiguration:标记该类是一个配置类。

@EnableAutoConfiguration:启用自动配置,告诉 Spring Boot 开始查找和应用自动配置。

@ComponentScan:用于扫描和自动装配组件。

2. @EnableAutoConfiguration 注解

@EnableAutoConfiguration 注解是自动配置的核心。它会触发一个选择器 AutoConfigurationImportSelector,该选择器负责查找并导入所有可用的自动配置类。

3. 自动配置类的查找

AutoConfigurationImportSelector 类的 selectImports() 方法会读取 spring.factories 文件,这个文件位于 META-INF 目录下,列出了所有可用的自动配置类的全限定名称。Spring Boot 根据类路径上的 JAR 包和应用的特性(如是否是 Web 应用)来决定哪些配置应该被激活。

4. 条件注解

自动配置类通常会使用条件注解(如 @ConditionalOnClass、@ConditionalOnBean、@ConditionalOnMissingBean、@ConditionalOnWebApplication 等)来控制是否应用特定的配置。这些注解允许自动配置类仅在满足特定条件时才会被激活。

5. 配置属性绑定

自动配置类会绑定到配置文件(如 application.properties 或 application.yml)中定义的属性。Spring Boot 提供了一种机制,可以将这些属性自动绑定到 Java 类中,通常使用 @ConfigurationProperties 注解。

6. Bean 的注册

自动配置类通过 @Bean 方法注册新的 bean 到 Spring 容器中,这些 bean 可以是组件、数据源、过滤器、拦截器等,从而简化了手动配置。

7. 调试和报告

如果启用了调试模式(通过 spring-boot:run 或设置 spring-boot-devtools),Spring Boot 会生成一个自动配置报告,显示哪些自动配置类被应用,哪些被忽略,以及原因。

总结

Spring Boot 的自动配置机制使得开发者无需编写大量样板代码来配置常见的 Spring 组件。它基于约定优于配置的原则,使得开发人员可以更专注于业务逻辑而不是基础设施的配置。

  如果大家需要视频版本的讲解,欢迎关注我的B站:

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

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

相关文章

真实测评,霍尼韦尔、希喂、352宠物空气净化器性能对比

在快节奏的社会生活中,人们越来越注重精神需要,许多年轻人纷纷选择拥抱宠物,作为生活中的温馨伴侣。宠物们治愈心灵的同时也要付出一定“代价”,日常养护,如清理猫毛、管理气味以及保持宠物环境的清洁,都是…

webpack的基本介绍与使用

webpack基本介绍及其基础案例 概念 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所…

学习记录day16—— 数据结构 双向链表 循环链表

双向链表 1、概念 1)就是从任意一个节点既能存储其前驱节点,又能存储后继节点 2)结构体中增加一个指向前驱节点的指针 //定义数据类型 typedef int datatype;//定义节点类型 typedef struct Node {union {int len;datatype data;};struct Node *prio; …

72 | 数据分析岗位招聘数据可视化

项目介绍 本项目旨在通过对智联招聘网站上发布的数据分析岗位信息的分析和可视化,帮助应届毕业生和希望进入数据分析行业的专业人士更好地理解当前的就业市场。通过收集包含职位名称、薪资范围、地点、工作经验、学历要求等关键信息的数据,项目深入探讨了数据分析岗位的多个…

【大师与bug里特】M_Studio《王国之梦》学习笔记

1️⃣ Object & object(✅) 之辨 《7.泛型事件框架〈余2min左右时〉》 不然inspector窗口的最后一行(告诉我们订阅者是SceneLoadManager它身上挂了☝️ObjectEventListener用来监听这个事件 有多少个事件注册到这里来了都能够看到)还是不会出现 加上…

【JVM基础05】——组成-能不能解释一下方法区?

目录 1- 引言:方法区概述1-1 方法区是什么?(What)1-2 为什么用方法区?方法区的作用 (Why) 2- ⭐核心:详解方法区(How)2-1 能不能解释一下方法区?2-2 元空间内存溢出问题2-3 什么是常量池?2-4 运行时常量池 …

接口自动化测试框架实战-2-项目接口文档

上一小节我们完成了项目开发环境的搭建,本小结我们具体介绍一下项目中使用到的接口文档。 本次我们以钉钉开放接口作为项目接口测试的示例,方便大家都能统一学习和调用,具体接口如下: 1、获取企业内部应用的access_token 在获取…

软件测试---测试需求分析

课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析(重点) 课程补充 灰度测试(基于功能):先发布部分功能,然后看用户的反馈,再去发布另外一部分的功能更新。 A/B测…

Domainim:一款高效的企业级网络安全扫描工具

关于Domainim Domainim是一款功能强大的企业级网络安全扫描工具,该工具运行效率高,功能完善,可以帮助广大研究人员针对企业或组织网络执行大规模安全扫描任务。 该工具可以快速执行网络安全扫描和域名/子域名网络侦查任务,旨在使…

Llama 3.1要来啦?!测试性能战胜GPT-4o

哎呀,Meta声称将于今晚发布的Llama 3.1,数小时前就在Hugging Face上泄露出来了?泄露的人很有可能是Meta员工? 还是先来看泄露出来的llama3.1吧。新的Llama 3.1模型包括8B、70B、405B三个版本。 而经过网友测试,该base…

Elasticsearch-RestAPI --学习笔记

RestAPI ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。 官方文档地址: Elasticsearch Clients | Elastic 以下关于RestAPI 的说明都是基于老版本客户端 初始化RestClient 1&…

STM32CUBEIDE FreeRTOS操作教程(一):LED闪灯

STM32CUBEIDE FreeRTOS操作教程(一):LED闪灯 STM32CUBEIDE(不是STM32CUBEMX)开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件,不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开…

防御课第2次作业

实验拓扑图 实验目的 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9,多出口环境基于带宽比例进行选…

内网隧道——HTTP隧道

文章目录 一、ReGeorg二、Neo-reGeorg三、Pivotnacci 实验网络拓扑如下: 攻击机kali IP:192.168.111.0 跳板机win7 IP:192.168.111.128,192.168.52.143 靶机win server 2008 IP:192.168.52.138 攻击机与Web服务器彼此之…

Leetcode3216. 交换后字典序最小的字符串

Every day a Leetcode 题目来源:3216. 交换后字典序最小的字符串 解法1:模拟 找到第一个 s[i] > s[i 1],且它们奇偶性相同,交换它们。 代码: /** lc appleetcode.cn id3216 langcpp** [3216] 交换后字典序最小…

elk日志索引被锁blocks,日志无法写入

现象: kafka积压,logstash无法将日志写入到es logstash报错: [logstash.outputs.elasticsearch][main][] Retrying failed action {:status>403 :error>{“type”>“cluster_block_exception”, “reason”>“index [] blocked …

鸿蒙OpenHarmony Native API【drawing_path.h】 头文件

drawing_path.h Overview Related Modules: [Drawing] Description: 文件中定义了与自定义路径相关的功能函数 Since: 8 Version: 1.0 Summary Functions FunctionDescription[OH_Drawing_PathCreate] (void)[OH_Drawing_Path] * 函数用于创建一个路径对象OH_Drawin…

怎么查快递和物流到哪里了,快递丢失怎么处理?

随着电子商务的发展,物流也越来越发达,人们的生活中有很多地方都与物流快递打交道。网购或者给远方的亲戚朋友寄礼物等等都需要快递。有时候想要知道快递寄送请款就要查询快递单号,那么,快递单号查询方法有哪些?没有快…

Django视图与URLs路由详解

在Django Web框架中,视图(Views)和URLs路由(URL routing)是Web应用开发的核心概念。它们共同负责将用户的请求映射到相应的Python函数,并返回适当的响应。本篇博客将深入探讨Django的视图和URLs路由系统&am…

搞一个boostrap主题,用django的mtv去对接

nginx的配置,设定这个模板映射的路径 location /assets/{alias /home/luichun/lc/Pyfile/Pyhome/app/statichome_to_nginx/pifu/dist/assets/;}1:设定一个主页的路由【django主要用来设定逻辑】 2:设定主页的响应内容【使用boostrap框架来对前端展示进行…