全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 20 道配套习题

底层启动源码剖析专题

专题说明

本专题深入剖析SpringBoot应用启动的底层源码实现,从SpringApplication构造过程到run方法执行流程,再到ApplicationContext创建刷新和内嵌容器启动,全面理解SpringBoot启动的完整生命周期和核心原理。

学习目标

  1. 理解SpringApplication构造过程和推断类型
  2. 掌握run方法的七大核心步骤
  3. 理解ApplicationContext创建与刷新流程
  4. 掌握Bean生命周期和自动配置触发时机
  5. 理解事件发布机制和监听器执行顺序
  6. 掌握内嵌容器启动原理

学习内容

  • SpringApplication构造过程(推断应用类型、加载Initializer、加载Listener)
  • run方法七大步骤(准备Environment、打印Banner、创建Context、准备Context、刷新Context、通知Listener)
  • ApplicationContext创建与类型选择
  • Bean生命周期与自动配置触发
  • SpringApplicationEvent事件机制
  • 内嵌容器启动原理

学习建议

建议先理解SpringApplication构造的核心逻辑,再跟踪run方法的执行流程,然后深入ApplicationContext的创建和刷新机制。注意理解自动配置是在Context刷新阶段触发的。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
多选题

在Spring Boot启动过程中,Environment对象的属性源(PropertySource)加载顺序是怎样的?

A

命令行参数优先级最高,最先加载

B

application.properties/yml文件在系统环境变量之后加载

C

ServletConfig和ServletContext属性在启动后期才加入

D

随机数属性源(random.*)最早加载

E

@PropertySource注解配置的属性源优先级最低

2
单选题

Spring Boot启动时会根据应用类型创建不同的Environment实现类,对于标准的Web应用(SpringApplicationBuilder.web(WebApplicationType.SERVLET)),创建的是哪种Environment?

A

StandardEnvironment

B

ServletEnvironment

C

StandardServletEnvironment

D

ReactiveEnvironment

3
填空题

Spring Boot中Environment对象获取属性的方法包括:获取单一属性使用________________________2_!!方法,获取必需属性(不存在抛异常)使用!!3_!!方法。

4
判断题

Spring Boot通过ConfigurationPropertySources.attach()方法将原始PropertySource转换为ConfigurationPropertySource,提供了统一的属性访问API,支持松散绑定(relaxed binding)。

A

B

5
多选题

在Spring Boot启动过程中,以下哪些事件会在ApplicationContext创建之前发布?

A

ApplicationStartingEvent

B

ApplicationEnvironmentPreparedEvent

C

ApplicationPreparedEvent

D

ApplicationContextInitializedEvent

E

ApplicationStartedEvent

6
单选题

关于Spring Boot的监听器机制,以下描述正确的是?

A

ApplicationListener通过META-INF/spring.factories注册,监听所有Spring事件

B

SpringApplicationRunListener只能监听Spring Boot启动事件,不能监听Spring事件

C

EventPublishingRunListener将SpringApplicationRunListener事件转发给ApplicationListener

D

自定义监听器必须继承SpringApplicationRunListener

7
填空题

SpringApplicationRunListener接口定义了启动流程的关键回调方法:启动开始时调用________________________2_!!方法,Context刷新完成时调用!!3_!!方法。

8
判断题

Spring Boot的ApplicationListener执行顺序可以通过实现Ordered接口或使用@Order注解来控制,默认情况下监听器按注册顺序执行。

A

B

9
多选题

关于Spring ApplicationContext的refresh()方法执行流程,以下哪些描述是正确的?

A

prepareRefresh()阶段会初始化PropertySources并验证必需属性

B

obtainFreshBeanFactory()阶段创建新的BeanFactory实例

C

invokeBeanFactoryPostProcessors()阶段执行BeanFactoryPostProcessor处理Bean定义

D

registerBeanPostProcessors()阶段注册BeanPostProcessor,但这些处理器还未对Bean生效

E

finishRefresh()阶段会初始化LifecycleProcessor并发布ContextRefreshedEvent

10
多选题

在finishBeanFactoryInitialization阶段,Bean实例化的顺序遵循以下哪些规则?

A

BeanPostProcessor类型的Bean在其他普通Bean之前实例化

B

@DependsOn注解指定的依赖Bean优先实例化

C

SmartInitializingSingleton的afterSingletonsInstantiated()在所有单例Bean实例化后执行

D

惰性初始化(@Lazy)的Bean不会在该阶段实例化

E

FactoryBean类型的Bean会先实例化其生产的Bean

11
单选题

Spring Boot启动时根据webApplicationType创建不同的ApplicationContext,对于WebApplicationType.SERVLET类型,创建的ApplicationContext是?

A

GenericApplicationContext

B

AnnotationConfigApplicationContext

C

AnnotationConfigServletWebServerApplicationContext

D

ServletWebServerApplicationContext

12
填空题

ApplicationContext关闭时调用________________________2_!!方法,带有@PreDestroy注解的方法也会被执行,最后发布!!3_!!事件。

13
判断题

ApplicationContext的onRefresh()方法是模板方法,子类可以重写该方法执行特定的初始化逻辑,ServletWebServerApplicationContext在此方法中启动内嵌Web容器。

A

B

14
多选题

Spring Boot启动过程中,Bean定义可以通过以下哪些方式加载到BeanFactory?

A

@Configuration类通过ConfigurationClassPostProcessor解析注册

B

META-INF/spring.factories中配置的EnableAutoConfiguration类自动加载

C

@ComponentScan扫描指定包下的@Component类注册

D

@Import注解导入的Configuration类或ImportSelector返回的类注册

E

XML配置文件通过XmlBeanDefinitionReader加载

15
单选题

关于BeanDefinition的核心属性,以下描述错误的是?

A

scope属性控制Bean的作用域,默认为singleton

B

lazyInit属性控制是否延迟初始化,默认为false

C

primary属性标记首选Bean,当有多个同类型候选时优先选择

D

dependsOn属性指定Bean实例化顺序,必须在目标Bean实例化之前

16
填空题

BeanDefinitionRegistry接口提供了注册Bean定义的核心方法:注册新Bean定义使用________________________2_!!方法,判断Bean定义是否存在使用!!3_!!方法。

17
判断题

ConfigurationClassPostProcessor是一个BeanFactoryPostProcessor,它在Bean实例化之前执行,负责解析@Configuration类、处理@Bean方法、处理@Import注解等,将Bean定义注册到BeanFactory。

A

B

18
多选题

关于Spring Boot的自动配置条件注解,以下哪些描述是正确的?

A

@ConditionalOnClass在类路径存在指定类时匹配成功

B

@ConditionalOnMissingBean在BeanFactory不存在指定类型Bean时匹配成功

C

@ConditionalOnProperty默认require=false,属性不存在时也匹配成功

D

@ConditionalOnWebApplication判断当前是否为Web应用环境

E

所有条件注解通过Condition接口实现,Spring Boot提供了多种Condition实现类

19
多选题

Spring Boot自动配置类的条件注解评估过程中,以下哪些描述是正确的?

A

条件注解评估在ConfigurationClassPostProcessor处理阶段执行

B

SpringBootCondition记录每个条件的匹配结果用于诊断报告

C

@ConditionalOnBean在Bean实例化之前评估,可能因Bean未注册而误判

D

AutoConfigurationSorter根据@AutoConfigureOrder和@AutoConfigureBefore/After排序

E

所有条件注解都必须同时匹配,配置类才会被加载

20
单选题

关于@ConditionalOnBean注解的使用,以下描述正确的是?

A

它检查BeanFactory中已实例化的Bean

B

它可以安全地用于自动配置类判断其他自动配置类是否生效

C

它只检查当前ApplicationContext,不检查父容器

D

它在Bean实例化阶段执行,确保Bean已经存在

← 上一个专题 内置容器基础用法专题
下一个专题 → 核心配置文件使用专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库