100 个 Spring Boot 专属知识点

0 阅读9分钟

Spring Boot 的核心价值在于“约定优于配置”,它并没有改变 Spring 框架的内核,而是通过大量的自动化封装,解决了 Spring 早期“配置地狱”的痛点。

以下梳理的 100 个 Spring Boot 专属知识点(剔除了纯 Spring 框架的内容),按照核心原理、自动配置、Web开发、运维监控、测试、部署与架构的学习路径进行了分类:

🚀 核心原理与启动引导

  1. SpringApplication 类:Spring Boot 程序的引导入口,负责初始化应用上下文。
  2. Spring Boot 启动流程:准备环境 -> 创建上下文 -> 刷新上下文 -> 运行 Runner 的完整生命周期。
  3. Banner 定制:启动时控制台打印的 ASCII 艺术字(banner.txt)的自定义与关闭。
  4. SpringApplicationRunListener:监听 Spring Boot 启动各个阶段的 SPI 接口。
  5. ApplicationRunner 与 CommandLineRunner:应用启动成功后执行特定逻辑的两个接口(参数形式不同)。
  6. SpringBootServletInitializer:将 Spring Boot 应用打包成 WAR 并在传统 Tomcat 中部署的基类。
  7. 外置 Tomcat 的排除:如何通过 Maven/Gradle 排除内置 Tomcat,使用外部容器。
  8. ApplicationContextInitializer:在 Spring 容器刷新之前,对 ConfigurableApplicationContext 进行初始化的回调接口。
  9. Spring Boot 的类加载器LaunchedURLClassLoader,用于支持可执行 JAR 的特殊类加载机制。
  10. 优雅停机 (Graceful Shutdown):Spring Boot 2.3+ 引入的特性,平滑处理正在进行的请求后再关闭应用。

⚙️ 自动配置 (AutoConfiguration) 核心

  1. @SpringBootApplication 注解:核心复合注解,包含 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
  2. @EnableAutoConfiguration:开启自动配置的开关,通过 @Import 导入自动配置逻辑。
  3. spring.factories 机制 (2.x):Spring Boot 2.x 中用于加载自动配置类、监听器等的核心 SPI 文件。
  4. AutoConfiguration.imports (3.x):Spring Boot 3.x 中替代 spring.factories 的新加载机制。
  5. @Conditional 系列注解:自动配置的基石,如 @ConditionalOnClass(类存在时生效)、@ConditionalOnMissingBean(Bean 不存在时生效)。
  6. @ConditionalOnProperty:根据配置文件中的属性值来决定是否加载某个 Bean。
  7. @ConditionalOnWebApplication:判断当前是否为 Web 环境(Servlet 或 Reactive)。
  8. 自动配置报告:启动时通过 --debug 参数查看哪些自动配置生效、哪些未生效及原因。
  9. 排除自动配置:通过 @SpringBootApplication(exclude = ...) 禁用特定的自动配置类。
  10. Spring Boot 的 SPI 扩展机制:如何编写自己的 Starter 并让 Spring Boot 自动识别。

📝 配置管理与属性绑定

  1. application.properties 与 application.yml:两种主流的配置文件格式及其语法差异。
  2. 外部化配置优先级:命令行参数 > Java 系统属性 > 操作系统环境变量 > jar 包外配置文件 > jar 包内配置文件的加载顺序。
  3. @ConfigurationProperties:将配置文件中的属性批量绑定到 Java Bean 中,支持松散绑定(Relaxed Binding)。
  4. @Value 与 @ConfigurationProperties 的区别:前者适合单个属性注入,后者适合结构化配置且支持 JSR-303 校验。
  5. Profile 多环境配置:通过 application-dev.ymlapplication-prod.ymlspring.profiles.active 实现环境隔离。
  6. Profile Group (3.x):Spring Boot 2.4+ 引入的配置组,一次性激活多个 Profile。
  7. 配置随机数:使用 ${random.int}${random.uuid} 在配置文件中生成随机值。
  8. 配置属性校验:在 @ConfigurationProperties 类上使用 @Validated@NotNull 等注解进行配置合法性校验。
  9. YAML 列表与 Map 绑定:如何在 YAML 中定义 List 和 Map 并绑定到 Java 对象。
  10. Config Data API (2.4+):Spring Boot 2.4 重构后的配置加载机制,替代了旧的 ConfigFileApplicationListener

🌐 Web 开发专属特性

  1. 内置 Web 服务器:默认集成 Tomcat,可无缝切换为 Jetty 或 Undertow。
  2. WebServerFactoryCustomizer:以编程方式定制内置 Web 服务器(如修改端口、线程池)的接口。
  3. Spring MVC 自动配置:自动配置 ViewResolverMessageConverterStaticResource 等 MVC 组件。
  4. HttpMessageConverters:Spring Boot 自动注册的 JSON(Jackson)、XML 等消息转换器。
  5. 静态资源映射:默认的 /static/public/resources 路径映射规则及 webjars 支持。
  6. Favicon 管理:如何禁用或自定义网站的 Favicon。
  7. 错误处理自动配置BasicErrorController 和默认的 /error 映射,提供统一的错误响应。
  8. ErrorViewResolver:自定义错误页面的解析逻辑(如 Whitelabel Error Page 的替换)。
  9. Spring Boot 与 Servlet 3.0+:自动注册 ServletFilterListener 组件(通过 @Bean@ServletComponentScan)。
  10. WebFlux 自动配置 (响应式):基于 Netty 的响应式 Web 开发栈的自动装配。
  11. Multipart 文件上传:自动配置文件上传的大小限制(max-file-size)和临时目录。
  12. CORS 全局配置:通过 WebMvcConfigurer@CrossOrigin 在 Boot 中的简化使用。
  13. SSL/HTTPS 配置:在 application.yml 中直接配置 server.ssl.* 开启 HTTPS。
  14. Server Compression:在配置文件中开启 Gzip 压缩(server.compression.enabled)。

📦 Starter 依赖与生态整合

  1. Starter 命名规范:官方 spring-boot-starter-* 与第三方 *-spring-boot-starter 的命名区别。
  2. spring-boot-starter-parent:继承父 POM 带来的依赖版本管理(Dependency Management)和默认插件配置。
  3. spring-boot-starter-web:整合 Spring MVC、Tomcat、Jackson 的 Web 开发起步依赖。
  4. spring-boot-starter-test:整合 JUnit 5、Mockito、AssertJ、Hamcrest 等测试库的起步依赖。
  5. spring-boot-starter-actuator:提供生产级监控和管理端点的起步依赖。
  6. spring-boot-starter-aop:整合 Spring AOP 和 AspectJ。
  7. spring-boot-starter-jdbc / jpa:数据库访问的起步依赖,自动配置数据源。
  8. spring-boot-starter-data-redis:整合 Redis(Lettuce 或 Jedis 客户端)的起步依赖。
  9. spring-boot-starter-security:整合 Spring Security,提供默认的安全拦截配置。
  10. spring-boot-starter-validation:整合 Hibernate Validator,提供参数校验支持。
  11. spring-boot-devtools:提供开发时热部署(Restart)、LiveReload 等开发体验增强工具。
  12. Spring Boot 与 Lombok 整合:自动处理注解处理器的配置。
  13. Spring Boot 3.x 的 Jakarta EE 9+ 迁移:从 javax.* 包名全面迁移到 jakarta.*

🩺 运维监控 (Actuator)

  1. Actuator 端点 (Endpoints):如 /health/info/metrics 等暴露应用运行状态的接口。
  2. 端点暴露配置:通过 management.endpoints.web.exposure.include 控制哪些端点可以通过 HTTP 访问。
  3. Health Indicator:内置的数据库、Redis、磁盘等健康检查,以及如何自定义 HealthIndicator
  4. Info Contributor:通过 application.yml 或 Git 插件自动注入应用版本、提交信息等。
  5. Metrics 与 Micrometer:Spring Boot 2.x 引入的度量指标门面,支持对接 Prometheus、InfluxDB 等。
  6. Prometheus 端点/actuator/prometheus,提供 Prometheus 格式的监控数据。
  7. Loggers 端点:运行时动态修改日志级别(如将某个包的日志从 INFO 改为 DEBUG)。
  8. Beans 端点:查看 Spring 容器中所有 Bean 的依赖关系和别名。
  9. Conditions Report 端点/actuator/conditions,查看自动配置生效情况的详细报告。
  10. Shutdown 端点:通过 POST 请求 /actuator/shutdown 远程关闭应用(需显式开启)。
  11. Management Port:将监控端点运行在独立的 HTTP 端口(management.server.port),与业务端口隔离。
  12. Health Group (2.x):将多个健康检查指标分组(如 liveness 和 readiness),适配 K8s 探针。

🧪 测试增强

  1. @SpringBootTest:加载完整的 Spring 应用上下文,进行集成测试的核心注解。
  2. @WebMvcTest:仅加载 Web 层(Controller、Filter 等),用于 Controller 的切片测试。
  3. @DataJpaTest:仅加载 JPA 相关组件,并自动配置内存数据库,用于 Repository 层测试。
  4. @MockBean:将 Mockito 模拟对象添加到 Spring 应用上下文中,替换真实的 Bean。
  5. TestRestTemplate / WebTestClient:Spring Boot 提供的用于集成测试的 HTTP 客户端工具。
  6. 嵌入式数据库支持:自动检测类路径下的 H2、HSQL、Derby 并配置内存数据库用于测试。
  7. JsonTest@JsonTest 注解,用于测试 JSON 序列化与反序列化逻辑。

🚢 打包与部署

  1. Fat Jar (Executable Jar):Spring Boot 独特的打包方式,将所有依赖打入一个 JAR 包,可直接 java -jar 运行。
  2. spring-boot-maven-plugin:负责打包、重打包(repackage)以及运行 Spring Boot 应用的 Maven 插件。
  3. Layered Jars (分层打包):Spring Boot 2.3+ 支持的 Docker 镜像优化打包方式,将依赖、资源、应用代码分层,利用 Docker 缓存加速构建。
  4. Buildpacks 支持:无需 Dockerfile,直接通过 mvn spring-boot:build-image 生成符合 OCI 标准的 Docker 镜像。
  5. Systemd 服务部署:将 Spring Boot 应用作为 Linux Systemd 服务运行(完全可执行 JAR)。
  6. 远程调试:启动时通过 --debug 或 JVM 参数开启远程调试端口。

🔧 高级特性与杂项

  1. Spring Boot Admin:一个开源的社区项目,提供可视化的 Spring Boot Actuator 管理界面。
  2. Application Events:Spring Boot 特有的事件,如 ApplicationStartedEventApplicationReadyEvent
  3. FailureAnalyzer:启动失败时,提供友好的错误诊断报告(如端口被占用、Bean 定义冲突)。
  4. Bean 覆盖 (Bean Overriding):Spring Boot 2.1+ 默认禁止同名 Bean 覆盖,需通过配置开启。
  5. Lazy Initialization:通过 spring.main.lazy-initialization=true 开启全局 Bean 懒加载,加速启动。
  6. AOT (Ahead-of-Time) 编译 (3.x):Spring Boot 3 引入的 AOT 处理,支持 GraalVM Native Image。
  7. Native Image 支持:将 Spring Boot 应用编译成原生二进制文件,实现毫秒级启动。
  8. Observability (可观测性 3.x):Spring Boot 3 对 Micrometer Tracing 的自动配置,替代了旧的 Spring Cloud Sleuth。
  9. RestClient (3.x):Spring Boot 3.2 引入的新一代同步 HTTP 客户端,替代 RestTemplate。
  10. Problem Details (3.x):自动支持 RFC 9457 标准的错误响应格式。
  11. Docker Compose 支持 (3.1+):启动应用时自动检测 docker-compose.yml 并拉起依赖的容器服务(如 MySQL、Redis)。
  12. HTTP Interface (声明式 HTTP 客户端):类似 OpenFeign 的声明式 HTTP 调用方式。
  13. 自动配置的顺序:通过 @AutoConfigureBefore@AutoConfigureAfter 控制自动配置类的加载顺序。
  14. 配置元数据 (spring-configuration-metadata.json):IDE 提示配置属性(如 server.port)的元数据文件生成。
  15. 依赖版本仲裁spring-boot-dependencies BOM 统一管理所有第三方库的版本,解决依赖冲突。
  16. Spring Boot CLI:基于 Groovy 的命令行工具,用于快速编写和运行 Spring Boot 脚本(较少用但属于 Boot 特性)。
  17. 环境变量绑定规则:将 SERVER_PORT 环境变量自动映射到 server.port 配置项。
  18. Spring Boot 的版本生命周期:了解 OSS (Open Source Support) 和 Commercial Support 的时间表,及时升级。

这 100 个知识点涵盖了 Spring Boot 从原理到实战的方方面面,掌握这些,你就真正掌握了 Spring Boot 区别于传统 Spring 的核心竞争力。