先问一句:你能说清 @SpringBootApplication 背后发生了什么吗

很多人用 Spring Boot 写了两年接口,能熟练加依赖、配 yml、写 Controller,但一旦被问到「自动配置类是怎么被选中的」「条件注解什么时候生效」「自己写的 Starter 为什么在别人项目里不生效」,就只能含糊过去。这种状态在业务稳定期没问题,等到要排查启动慢、Bean 冲突、配置不生效、依赖版本打架的时候,就会卡住。

这门课面向的就是这个缺口:不是教你再用一遍 Spring Boot,而是把已经会用的东西拆开,看它在容器里到底怎么跑起来的。

它补的是哪几块能力

Spring Boot 的「会用」和「懂」之间,隔着几层东西,这门课基本是围着这几层来的。

  • 启动流程与容器刷新。从 SpringApplication 的构造、run 方法的执行顺序,到 Environment 准备、BeanDefinition 加载、容器 refresh 的各个扩展点。搞清楚这条线,你才知道自己的 ApplicationRunner、BeanPostProcessor 是在哪一步被调到的。
  • 自动配置的装配机制。配置类是怎么被收集的、@Conditional 家族(@ConditionalOnClass、@ConditionalOnMissingBean 等)的判断依据是什么、加载顺序和覆盖关系怎么定。这是「为什么引入了依赖就自动生效」的答案。
  • 配置绑定与外部化配置。@ConfigurationProperties 的绑定过程、松散绑定规则、多环境配置的优先级、命令行参数与配置文件的覆盖顺序。线上配置不生效,十有八九出在这里。
  • Spring Boot 与 Spring 的关系。哪些是 Boot 加的,哪些本来就是 Spring 的能力。分清楚这层,才不会把所有问题都归到「Boot 的坑」上。

看完应该能回答的问题

判断自己有没有学进去,不看笔记记了多少,看能不能回答下面这些具体问题:

  • 启动时 @SpringBootApplication 展开后一共包含哪几个注解,各自负责什么?
  • 自动配置类是通过什么机制被读取的,为什么它可以用 @ConditionalOnMissingBean 让你的自定义 Bean 顶掉默认的?
  • 同一个配置项同时出现在 application.yml、application-dev.yml、环境变量和命令行参数里,最终生效的是哪个,依据是什么?
  • 自己写一个 Starter,需要哪些组成部分,为什么很多人的 Starter 在别人项目里不生效?
  • 启动报 Bean 冲突或者循环依赖时,从哪几个点入手定位?

如果这些问题里有三四个你答不利索,那这门课的定位就适合你。

怎么用这份材料

只看不练,原理课最容易变成「听的时候都懂,用的时候全忘」。建议按这个节奏走:先跟着内容把启动流程和自动配置的主线过一遍,形成整体印象;然后打开自己手上任意一个 Spring Boot 项目,把启动日志逐行读一遍,对照课里讲的阶段去找对应的输出;再动手写一个最简单的自定义 Starter,哪怕只是包装一个工具类,跑通「引入依赖即生效」的完整链路。

每学完一块,回到上面那组问题自测一次。答不上来的部分,就是下一轮要重点看的。

这门课不适合零基础第一次接触 Spring Boot 的人——至少得写过一个能跑的 Web 项目,知道 Controller、Service、Bean 是什么,否则听起来会像在背名词。它更适合已经用过一段时间、想从「照着文档配」过渡到「知道为什么这么配」的人。

黑马博学谷 - Spring Boot 2原理深入解析

Spring Boot核心技术深度剖析

编辑点评

深入浅出解析Spring Boot原理,助你掌握核心框架。

⭐ 编辑推荐

掌握Spring Boot核心技术,提升后端开发能力。

课程深入解析Spring Boot原理,涵盖核心框架、配置原理、自动配置等。

课程亮点

• Spring Boot原理深度解析
• 核心框架实战演练
• 配置原理与自动配置

适合人群

  • Java后端开发者
  • Spring Boot初学者
  • 有志于提升后端开发能力者

学习收获

熟练掌握Spring Boot核心技术
提升后端开发效率
构建高性能Web应用

祝您学习愉快!

学有所成,前程似锦!