springboot面试题

article/2025/8/24 4:22:51

SpringBoot注解

@SpringBootApplication

@EnableAutoConfiguration

springboot自动配置原理

@SpringBootApplication 是一个复合注解,结合了以下三个核心注解的功能,用于简化 Spring Boot 应用的启动类配置:

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan

通常作为主类注解使用,标记 Spring Boot 应用的入口。

@SpringBootConfiguration

表明当前类是一个 Spring Boot 的配置类,继承自 @Configuration 注解。用于定义 Bean 的配置方法,替代传统 XML 配置方式。

@EnableAutoConfiguration

启用 Spring Boot 的自动配置机制。根据项目依赖(如 JPA、Redis 等)自动配置 Spring 应用的上下文,减少手动配置。

@ComponentScan

自动扫描指定包及其子包下的组件(如 @Component@Service@Repository@Controller 等),并将它们注册为 Spring Bean。默认扫描当前类所在包。

Spring Boot 自动配置原理超简版解释

想象 Spring Boot 自动配置就像一个智能家电安装师傅,它会根据你家里的电器(项目中的依赖)自动帮你接线(配置),你只需要按下开关(主类上的 @SpringBootApplication)就能用了。具体来说:

极简版工作流程

  1. ​检查工具箱​​(扫描classpath):

    • 师傅先看你家有哪些电器(检查pom.xml中的依赖)
    • 比如发现你有 spring-boot-starter-data-jpa → 知道你要用数据库
  2. ​查说明书​​(spring.factories):

    • 师傅包里有个万能说明书(META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    • 找到对应电器的安装指南(如 JpaAutoConfiguration
  3. ​看你的要求​​(条件装配):

    • 用各种@Conditional检查:

    @ConditionalOnClass(DataSource.class) // 你家有水管才装热水器 @ConditionalOnMissingBean(DataSource.class) // 你自己没带水管才用我的

  4. ​自动接线​​(创建Bean):

    • 如果所有条件满足,就自动把线接好(创建并配置好DataSource、EntityManager等)
  5. ​给你遥控器​​(属性配置):

    • 你可以通过application.yml调整参数:

    spring: datasource: url: jdbc:mysql://localhost:3306/mydb

关键比喻

技术概念生活比喻
@EnableAutoConfiguration告诉师傅"开始自动安装吧"
AutoConfiguration各种电器的安装说明书
@Conditional师傅的智能判断规则
starter已经打包好的电器套装

记住三个最核心的:

  1. ​约定大于配置​​:只要你按标准带依赖(starter),它就按默认最佳实践配好
  2. ​随时可覆盖​​:所有自动配置你都能自己重新定义(用@Bean
  3. ​透明可追溯​​:启动时加 --debug 参数能看到所有自动配置报告

下次看到自动配置,就想象是这个师傅在问:"你要用数据库吗?→ 有相关类吗?→ 没自己配过吧?→ 那我给你配个最常用的咯!"


http://www.hkcw.cn/article/MpYxTpynKJ.shtml

相关文章

架构意识与性能智慧的双重修炼

架构意识与性能智慧的双重修炼 ——现代软件架构师的核心能力建设指南 作者:蓝葛亮 🎯引言 在当今快速发展的技术环境中,软件架构师面临着前所未有的挑战。随着业务复杂度的不断增长和用户对性能要求的日益严苛,如何在架构设计中平衡功能实现与性能优化,已成为每个技术…

STM32G4 电机外设篇(一) GPIO+UART

目录 一、STM32G4 电机外设篇(一) GPIOUART1 GPIO1.1 STM32CUBEMX 配置以及Keil代码1.2 代码和实验现象 2 UART2.1 STM32CUBEMX 配置以及Keil代码2.2 代码和实验现象 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇&#xff0…

小型语言模型:为何“小”才是“大”?

当说到人工智能(AI)的时候,大家通常会想到那些拥有数十亿参数的超大型语言模型,它们能做出一些令人惊叹的事情。 厉害不厉害?绝对厉害! 但对于大多数企业和开发者来说,实用吗?可能…

痉挛性斜颈介绍

痉挛性斜颈是一种局限性肌张力障碍性疾病,主要表现为颈部肌肉不自主收缩,导致头部向一侧扭转、倾斜或后仰,可伴有颈部疼痛或姿势异常。该病多在成年后起病,男女均可发病,具体病因尚未完全明确,可能与神经调…

【笔记】suna部署之获取 OpenRouter API key

#工作记录 OpenRouter 注册 OpenRouter 账号: 打开浏览器,访问OpenRouter 官网。点击页面右上角的 “Sign in” 按钮。选择注册方式,可使用 Google 账户、GitHub 账户、Discord 账户登录,也可使用电子邮件注册。若使用邮箱注册&am…

最优控制:从变分法到庞特里亚金原理

典型问题 根据系统的建模可以划分为: 线性系统: x ˙ A x B u \mathbf{\dot{x}} \boldsymbol{A}\mathbf{x}\boldsymbol{B}\mathbf{u} x˙AxBu非线性系统 x ˙ ( t ) f ( x ( t ) , u ( t ) , t ) \dot{\mathbf{x}}(t) \mathbf{f}(\mathbf{x}(t)…

R²AIN SUITE 驱动制造业变革:从灯塔实践到企业级落地方案

一、全球制造业的AI革命浪潮 世界经济论坛《全球灯塔网络》报告揭示,AI在制造业的应用正呈现指数级增长。最新数据显示,入选灯塔工厂的企业中,AI技术渗透率已从早期的不足20%跃升至60%左右,推动生产系统实现2-3倍效率提升、质量缺…

全球全能邮箱:如何选适合的全能邮件服务?

全球全能邮箱:如何选适合的全能邮件服务? 全球全能邮箱怎么选?烽火域名邮箱的优势特点有哪些? 全球全能邮箱不仅仅是一个简单的邮箱工具,更是集成多种功能,支持多语言、多终端、跨区域使用的全能邮件解决…

抖音、快手无水印福音开源下载器之蓝猫 BlueCatKoKo

之前分享过闪豆视频下载器https://pan.quark.cn/s/8e262bd6e130(自行保存下载),它支持抖音,快手,B站,有管,可以批量下载。 蓝猫下载器链接:夸克网盘分享(自行保存下载&a…

嵌入式学习笔记 - freeRTOS同优先级任务时间片抢占的实现

已经知道freeRTOS的任务切换函数发生在systick中断中,如下图 由上图可见,任务切换有个先决条件TaskIncrementTick()函数返回为1,这个函数如下图, 第564行是判断如果延时时间到的任务比当前任务优先级高&am…

Cisco Packer Tracer 中 VLAN 与三层交换机

一、实验目的 1)掌握 VLAN 的基本配置方法, 理解 VLAN 的功能和作用; 2)掌握三层交换机的基本配置方法。 3)理解三层网络的路由转发 二、实验环境 1)运行 Windows 2008 Server/XP/7 /10操作系统的 PC …

数据结构——哈希表

一、概念 哈希表也叫做散列表。是根据关键码值(Key Value)直接进行访问的数据结构。 哈希表通过「键 key 」和「映射函数 Hash(key) 」计算出对应的「值 value」,把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个…

Kotlin中的::操作符详解

Kotlin提供了::操作符,用于创建对类或对象的成员(函数、属性)的引用。这种机制叫做成员引用(Member Reference)。这是Kotlin高阶函数和函数式编程的重要组成部分。 简化函数传递 在Java中,我们这样传方法: list.forEach(item -> System.…

K8S集群主机网络端口不通问题排查

一、环境: k8s: v1.23.6 docker: 20.10.14 问题和故障现象:devops主机集群主机节点到端口8082不通(网络策略已经申请,并且网络策略已经实施完毕),而且网络实施人员再次确认,网络策…

回调函数的理解

int yuxiangrousi 0; // 全局变量:鱼香肉丝(酱油量)// 回调函数:妈妈处理酱油(将酱油加入鱼香肉丝) void mother_callback(int new_jiangyou) {yuxiangrousi new_jiangyou; // 把酱油放进鱼香肉丝 }// 孩…

python字符重复一次 2023年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

python字符重复一次 2023全国青少年信息素养大赛Python编程挑战赛复赛真题解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解

【笔记】suna部署之获取 Supabase API key 和 project URL

#工作记录 Supabase | The Open Source Firebase Alternative 一、注册与登录 方式一:GitHub 授权登录 在登录页面选择 “继续使用 GitHub” ,跳转到 GitHub 授权页面(如图 5 所示)。确认 “Supabase 的想要访问您的 [账户名] 帐…

从法律层面剖析危化品证书:两证一证背后的安全逻辑

《安全生产法》第 24 条明确规定,危化品单位主要负责人和安全管理人员 “必须考核合格方可上岗”。这并非仅仅是行政要求,而是通过法律来筑牢安全防线。在某危化品仓库爆炸事故中,由于负责人未持证,导致事故责任升级,企…

MMR搜索和LangChain整合Milvus实战

引言 在现代信息检索系统的构建过程中,搜索策略的选择往往决定了用户体验的质量。相似度搜索与MMR最大边界相关搜索作为两种主流技术方案,各自承担着不同的使命:前者专注于精确匹配,后者致力于平衡相关性与多样性。 本文将通过深入…

C++容器进阶:深入解析unordered_map与unordered_set的前世今生

目录 🚀 引言:现代C容器的王者 🎯 学习路径 第一章:哈希表的数学魔法 1.1 哈希表的基本概念 哈希表的数学模型 1.2 哈希函数的设计艺术 第二章:unordered_map的深度解析 2.1 unordered_map的设计哲学 2.2 uno…