面试题答案
一键面试Spring Boot自动配置流程
-
启动引导:
- 应用程序启动时,首先运行
SpringApplication.run(YourApplication.class, args)
。SpringApplication
负责引导整个Spring Boot应用,它会创建一个SpringApplication
实例,并且准备好ApplicationContext
。
- 应用程序启动时,首先运行
-
加载自动配置类:
- 关键注解:
@SpringBootApplication
:这是Spring Boot应用的主注解,它组合了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
。其中@EnableAutoConfiguration
开启了自动配置功能。@EnableAutoConfiguration
:该注解通过@Import(AutoConfigurationImportSelector.class)
导入AutoConfigurationImportSelector
类。
- 关键类:
AutoConfigurationImportSelector
:实现了ImportSelector
接口,它负责从META-INF/spring.factories
文件中加载所有的自动配置类。在spring-boot-autoconfigure
模块的META - INF/spring.factories
文件中,定义了一系列的自动配置类,格式为org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ ...
。AutoConfigurationImportSelector
会读取这个文件,并将所有配置类作为候选者。
- 关键注解:
-
过滤自动配置类:
- 关键注解:
@Conditional
及其一系列派生注解(如@ConditionalOnClass
、@ConditionalOnMissingBean
、@ConditionalOnProperty
等)。
- 关键类:
AutoConfigurationImportFilter
:在加载自动配置类后,会使用AutoConfigurationImportFilter
对其进行过滤。例如,@ConditionalOnClass
表示当类路径下存在指定的类时,对应的自动配置类才会生效;@ConditionalOnMissingBean
表示当容器中不存在指定类型的Bean时,自动配置类才会生效;@ConditionalOnProperty
表示当指定的属性满足一定条件时,自动配置类才会生效。通过这些条件过滤,只有满足条件的自动配置类才会被真正应用到Spring容器中。
- 关键注解:
-
应用自动配置:
- 关键注解:
@Configuration
:标识一个类作为配置类,自动配置类通常被标记为@Configuration
。@Bean
:在配置类中,使用@Bean
注解来定义Bean,这些Bean会被注册到Spring容器中。例如,在DataSourceAutoConfiguration
中,会根据条件创建DataSource
相关的Bean。
- 关键类:
- 各个具体的自动配置类,如
WebMvcAutoConfiguration
负责配置Spring MVC相关的组件,DataSourceAutoConfiguration
负责配置数据源相关的组件等。这些自动配置类会根据前面的条件过滤结果,在Spring容器中创建并配置相应的Bean,从而完成自动配置过程。
- 各个具体的自动配置类,如
- 关键注解:
Spring Boot的自动配置通过一系列的注解和类协作,从启动引导开始,加载、过滤并应用自动配置类,极大地简化了Spring应用的配置过程。