TL;DR(30 秒扫完)
- SpringBoot 定位:Spring 的封装,提供约定大于配置、自动配置、Starter 依赖管理,快速启动服务
- @SpringBootApplication:= @EnableAutoConfiguration + @ComponentScan + @Configuration
- 自动配置机制:AutoConfigurationImportSelector 扫描 spring.factories(2.x)/ AutoConfiguration.imports(3.x),通过条件注解(@ConditionalOnClass / @ConditionalOnMissingBean / @ConditionalOnProperty)决定是否生效
关键结论
结论 A(定位)SpringBoot 是 Spring 的封装,提供约定大于配置、自动配置、Starter 依赖管理,快速启动服务
结论 B(@SpringBootApplication)= @EnableAutoConfiguration + @ComponentScan + @Configuration
结论 C(自动配置)AutoConfigurationImportSelector 扫描配置类,通过条件注解决定是否生效
结论 D(版本差异)Spring Boot 2.x 使用 spring.factories,3.x 使用 AutoConfiguration.imports
完整讲解(费曼四步)
STEP 1 · 概念(一句话定义)
- SpringBoot:Spring 的封装框架,提供约定大于配置、自动配置、Starter 依赖管理,快速启动服务
- 自动配置:SpringBoot 根据类路径中的依赖和配置,自动配置 Spring 应用程序的能力
- 条件注解:根据某些条件(类路径、配置、Bean 存在等)决定是否生效的注解
STEP 2 · 大白话(生活类比)
类比(SpringBoot):就像宜家家具——你只需要买回家(引入 Starter),按照说明书组装(约定大于配置),就能快速使用(自动配置),不需要自己设计图纸(Spring 配置)。
STEP 3 · 底层(细节 + 代码/表格)
3.1 @SpringBootApplication 拆解
@SpringBootConfiguration // = @Configuration
@EnableAutoConfiguration // 自动配置核心
@ComponentScan // 组件扫描
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3.2 自动配置机制
扫描流程:@EnableAutoConfiguration触发AutoConfigurationImportSelector- 扫描 spring.factories(2.x)/ AutoConfiguration.imports(3.x)
- 加载自动配置类(如
WebMvcAutoConfiguration、DataSourceAutoConfiguration) - 通过条件注解决定是否生效
| 注解 | 条件 |
|---|---|
| @ConditionalOnClass | 类路径中存在某个类 |
| @ConditionalOnMissingBean | 容器中不存在某个 Bean |
| @ConditionalOnProperty | 配置文件中存在某个属性 |
| @ConditionalOnWebApplication | 是 Web 应用 |
| @ConditionalOnNotWebApplication | 不是 Web 应用 |
3.3 版本差异
| 特性 | Spring Boot 2.x | Spring Boot 3.x |
|---|---|---|
| 配置文件 | spring.factories | AutoConfiguration.imports |
| 最低 JDK | 8 | 17 |
| 包名前缀 | javax.* | jakarta.* |
| 配置属性 | spring.xxx | spring.xxx(部分重命名) |
3.4 内嵌容器
SpringBoot 内置 Tomcat / Jetty / Undertow,启动时自动创建内嵌容器,无需外部部署。@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
// 内嵌容器启动,监听 8080 端口
}
}
STEP 4 · 简化(比喻/口诀)
SpringBoot 口诀:@SpringBootApplication 三合一,AutoConfiguration 扫配置,条件注解决定生效,约定大于配置快速启。
版本差异口诀:2.x 用 spring.factories,3.x 用 imports,JDK 8→17,javax→jakarta。
速查表
SpringBoot · 约定大于配置 · 自动配置 · Starter 依赖管理 · 内嵌容器
@SpringBootApplication · @EnableAutoConfiguration + @ComponentScan + @Configuration
自动配置 · AutoConfigurationImportSelector 扫描 · spring.factories(2.x)/imports(3.x) · 条件注解决定生效
版本差异 · 2.x: spring.factories/JDK8/javax · 3.x: imports/JDK17/jakarta
常见错点:SpringBoot 是独立框架 ❌ / 自动配置全自动 ❌ / 2.x 和 3.x 没区别 ❌
Anki 候选卡片
Q: @SpringBootApplication 包含哪三个注解?
A: @EnableAutoConfiguration + @ComponentScan + @Configuration
Q: Spring Boot 2.x 和 3.x 的配置文件差异是什么?
A: 2.x 用 spring.factories,3.x 用 AutoConfiguration.imports
Q: 自动配置的"约定大于配置但可覆盖"机制是什么?
A: 用户显式 @Bean 优先于自动配置的默认实现(通过 @ConditionalOnMissingBean 实现)
Q: SpringBoot 内置哪些容器?
A: Tomcat / Jetty / Undertow
Q: Spring Boot 3.x 的最低 JDK 版本是什么?
A: JDK 17
关联题目
关联知识
@SpringBootApplication 三合一;AutoConfigurationImportSelector 扫描配置类;条件注解决定是否生效
✦ 记 忆 口 诀 ✦
@SpringBootApplication 三合一 / AutoConfiguration 扫配置 / 条件注解决定生效
关键可视化
暂无可视化
知识关系
⬆️ 前置(Prerequisite)
spring-ioc-core🔄 延伸(Extends)
暂无⚡ 对比(Contrast)
暂无
🎯 概念
📏 规则
⚠️ 误区
🔍 追问
✨ 口诀
共 0 张卡,点击翻面