2025年Java面试宝典点击获取 (含Spring Boot高频考点)
Spring Boot启动类加载顺序与加载内容解析
很多同学在面试中被问到"Spring Boot启动类加载顺序是怎样的"都会懵圈。其实这道题考察的是对Spring Boot底层原理的理解,我们只需要抓住加载触发点、配置优先级、组件初始化这三个维度就能给出高分答案。作为在面试鸭返利网刷过500+真题的老司机,我来给大家拆解这个高频考点。

启动类的核心作用
当执行main()方法时,SpringApplication.run()会触发以下关键流程:
- 加载默认配置文件(application.properties/yml)
- 初始化Spring应用上下文
- 执行自动配置类
- 启动内嵌Servlet容器
- 注册Shutdown Hook
这个过程就像搭积木,底层框架先准备好基础模块,再按需装配开发者定义的组件。注意这里有个常见陷阱:Bean的加载顺序不由@Order注解决定,而是受声明顺序和依赖关系影响。
六大加载阶段详解
-
环境准备阶段
- 读取JVM参数
- 加载Profile配置
- 初始化Banner(就是启动时那个LOGO)
-
上下文初始化
- 创建BeanFactory
- 加载主配置类(@SpringBootApplication标注的类)
- 注册Bean定义
-
自动配置触发
- 扫描所有jar包的META-INF/spring.factories
- 按条件装配配置类(@Conditional系列注解在此生效)
- 过滤重复配置
-
Bean实例化
- 优先初始化配置类Bean
- 处理@Autowired依赖
- 执行@PostConstruct方法
-
监听器启动
- ApplicationRunner
- CommandLineRunner
- 自定义监听器
-
容器就绪
- 启动Tomcat/Undertow等Web容器
- 注册DispatcherServlet
- 发布ApplicationReadyEvent事件

必须掌握的加载内容
-
配置加载顺序(优先级由高到低):
- 命令行参数
- JNDI属性
- 操作系统环境变量
- application-{profile}.properties
- @PropertySource注解指定配置
-
核心注解执行顺序: @Configuration > @ComponentScan > @EnableAutoConfiguration > @Conditional
-
自动配置黑名单机制: 在application.properties中添加
spring.autoconfigure.exclude=com.example.SomeAutoConfiguration可以禁用指定自动配置类
需要特别注意的是,Web应用的Filter和Interceptor的加载顺序与声明顺序相反,这是很多同学实际开发中容易踩坑的地方。如果遇到Bean循环依赖问题,推荐使用setter注入代替构造器注入。
高频面试题破解
Q:如何控制Bean的加载顺序? A:推荐三种解决方案:
- 使用@DependsOn明确依赖关系
- 通过实现PriorityOrdered/Ordered接口
- 分批次配置(@Configuration的嵌套使用)
Q:自定义Starter要注意什么? A:需要重点考虑:
- spring.factories文件书写规范
- 条件注解的正确使用
- 自动配置类的保护机制(@ConditionalOnMissingBean)

准备面试时,建议大家多关注启动过程中的扩展点设计,比如ApplicationContextInitializer和BeanFactoryPostProcessor的区别。如果通过面试鸭返利网购买会员,可以找我返利25元,相当于用更低成本获取最新的面试题库。
理解启动原理不仅为了面试,更能帮助我们在实际项目中:
- 优化应用启动速度
- 合理设计模块依赖
- 精准定位启动异常
- 实现灵活的功能开关
建议大家结合官方文档和源码中的SpringApplication.run()方法,亲自走一遍启动流程的调试,这对掌握启动机制会有质的提升。


