MST

星途 面试题库

面试题:Java 中 Spring Boot 自动配置的原理是什么

请详细阐述 Spring Boot 自动配置的流程,包括涉及到的关键注解、类以及它们之间的协作关系。
12.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Spring Boot自动配置流程

  1. 启动引导

    • 应用程序启动时,首先运行SpringApplication.run(YourApplication.class, args)SpringApplication负责引导整个Spring Boot应用,它会创建一个SpringApplication实例,并且准备好ApplicationContext
  2. 加载自动配置类

    • 关键注解
      • @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会读取这个文件,并将所有配置类作为候选者。
  3. 过滤自动配置类

    • 关键注解
      • @Conditional及其一系列派生注解(如@ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnProperty等)。
    • 关键类
      • AutoConfigurationImportFilter:在加载自动配置类后,会使用AutoConfigurationImportFilter对其进行过滤。例如,@ConditionalOnClass表示当类路径下存在指定的类时,对应的自动配置类才会生效;@ConditionalOnMissingBean表示当容器中不存在指定类型的Bean时,自动配置类才会生效;@ConditionalOnProperty表示当指定的属性满足一定条件时,自动配置类才会生效。通过这些条件过滤,只有满足条件的自动配置类才会被真正应用到Spring容器中。
  4. 应用自动配置

    • 关键注解
      • @Configuration:标识一个类作为配置类,自动配置类通常被标记为@Configuration
      • @Bean:在配置类中,使用@Bean注解来定义Bean,这些Bean会被注册到Spring容器中。例如,在DataSourceAutoConfiguration中,会根据条件创建DataSource相关的Bean。
    • 关键类
      • 各个具体的自动配置类,如WebMvcAutoConfiguration负责配置Spring MVC相关的组件,DataSourceAutoConfiguration负责配置数据源相关的组件等。这些自动配置类会根据前面的条件过滤结果,在Spring容器中创建并配置相应的Bean,从而完成自动配置过程。

Spring Boot的自动配置通过一系列的注解和类协作,从启动引导开始,加载、过滤并应用自动配置类,极大地简化了Spring应用的配置过程。