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

自动配置原理专题

专题说明

本专题深入剖析SpringBoot自动配置的底层实现原理,从自动配置思想到@EnableAutoConfiguration注解机制,再到SpringFactoriesLoader加载机制和条件注解判断,最后讲解自动配置顺序控制与自定义自动配置,全面理解SpringBoot的核心魔法。

学习目标

  1. 理解自动配置的核心思想和解决问题
  2. 掌握@EnableAutoConfiguration注解的作用
  3. 理解SpringFactoriesLoader加载机制
  4. 掌握条件注解@Conditional系列的使用
  5. 理解自动配置顺序与优先级控制
  6. 学会自定义自动配置类

学习内容

  • 自动配置原理概述(核心思想与工作原理)
  • @EnableAutoConfiguration注解详解
  • 自动配置类加载机制(SpringFactoriesLoader)
  • 条件注解@Conditional系列(@ConditionalOnClass、@ConditionalOnBean等)
  • 自动配置顺序与优先级(@AutoConfigureOrder、@AutoConfigureBefore/After)
  • 自定义自动配置类

学习建议

建议先理解自动配置的核心思想和工作流程,再学习@EnableAutoConfiguration注解和SpringFactoriesLoader加载机制,然后深入条件注解的使用和原理,最后掌握自动配置顺序控制和自定义方法。注意使用debug=true查看自动配置报告。

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

Spring Boot的自动配置可以被用户自定义的配置覆盖,用户定义的Bean优先于自动配置的Bean。

A

B

2

自定义自动配置类应该使用@Configuration(proxyBeanMethods = false)声明为Lite模式,以提高启动性能。

A

B

3

自动配置类的加载顺序很重要,因为某些配置需要依赖其他配置创建的Bean,顺序不当可能导致Bean无法正确创建。

A

B

4

@EnableAutoConfiguration注解会自动扫描项目中的所有@Component、@Service、@Controller等注解标注的类。

A

B

单选题
5

Spring Boot 2.7之后,自动配置类通过哪个文件注册?

A

META-INF/spring.factories

B

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

C

application.properties

D

META-INF/config/spring.xml

6

@ConditionalOnBean注解检查的是什么条件?

A

classpath中是否存在指定类

B

Spring容器中是否存在指定Bean

C

配置文件中是否存在指定属性

D

JVM中是否存在指定对象

7

如何排除Spring Boot的某个自动配置类?

A

在application.yml中配置spring.autoconfigure.exclude

B

在@SpringBootApplication注解中使用exclude属性

C

两种方式都可以

D

无法排除自动配置

8

Spring Boot的自动配置类主要存放在哪个模块中?

A

spring-boot-core

B

spring-boot-autoconfigure

C

spring-boot-starter-web

D

spring-context

9

要自定义一个条件注解,需要实现哪个接口?

A

ImportSelector

B

Condition

C

BeanDefinitionRegistryPostProcessor

D

ApplicationContextAware

10

@EnableAutoConfiguration注解通过@Import导入哪个类来实现自动配置类的加载?

A

ConfigurationClassPostProcessor

B

AutoConfigurationImportSelector

C

ComponentScanAnnotationParser

D

BeanDefinitionLoader

11

Spring Boot自动配置的核心思想是什么?

A

手动配置所有组件

B

根据项目依赖和配置自动装配Bean

C

禁用所有Spring配置

D

强制使用XML配置

12

Spring Boot使用哪个类来加载spring.factories或imports文件中的自动配置类?

A

ClassPathXmlApplicationContext

B

SpringFactoriesLoader

C

BeanDefinitionReader

D

AnnotationConfigApplicationContext

13

@ConditionalOnClass注解的作用是什么?

A

当容器中存在指定Bean时生效

B

当classpath中存在指定类时生效

C

当配置文件中有指定属性时生效

D

当应用是Web应用时生效

多选题
14

Spring Boot自动配置类加载的完整流程包括哪些步骤?

A

AutoConfigurationImportSelector读取配置文件

B

过滤不满足条件的配置类

C

按顺序加载满足条件的配置类

D

执行配置类中的@Bean方法装配Bean

15

Spring Boot提供了哪些条件注解?

A

@ConditionalOnClass

B

@ConditionalOnBean

C

@ConditionalOnProperty

D

@ConditionalOnWebApplication

16

Spring Boot自动配置会根据哪些条件判断是否生效?

A

classpath中是否存在某个类

B

容器中是否已存在某个Bean

C

配置文件中是否有特定属性

D

应用运行的环境

17

@EnableAutoConfiguration注解包含哪些元注解或@Import?

A

@AutoConfigurationPackage

B

@Import(AutoConfigurationImportSelector.class)

C

@ComponentScan

D

@Configuration

填空题
18

Spring Boot启用自动配置的核心注解是____________,它通常被包含在____________组合注解中。自动配置类通过META-INF/spring/____________文件注册。

19

@AutoConfigurationPackage注解的作用是将主启动类所在的____________路径注册到容器中,主要用于____________实体扫描和其他需要自动扫描主包的场景。它内部通过@Import导入____________类实现。

简答题
20

请编写一个完整的自定义Spring Boot Starter示例,包括:

  1. MyService接口和默认实现
  2. MyServiceProperties配置属性类
  3. MyServiceAutoConfiguration自动配置类
  4. imports文件内容
参考答案
1.正确 2.正确 3.正确 4.错误 5.B 6.B 7.C 8.B 9.B 10.B 11.B 12.B 13.B 14.A;B;C;D 15.A;B;C;D 16.A;B;C;D 17.A;B 18.@EnableAutoConfiguration;@SpringBootApplication;org.springframework.boot.autoconfigure.AutoConfiguration.imports 19.包;JPA;AutoConfigurationPackages.Registrar 20.
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 线上性能监控与压测优化专题
下一个专题 → 自定义Starter开发专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码