Skip to content

SpringBoot面试题

约 925 字大约 3 分钟

每日一问SpringBoot基础

2025-10-26

@EnableAutoConfiguration 注解和 spring.factories 指定配置类

SpirngBoot面试题

什么是SpringBoot?

版本一

SpringBoot是一个用于简化Spring服务项目开发的框架,极大简化了Spring框架的配置项,降低的服务开发门槛,基本实现了开箱即用。

并且SpringBoot已经事先集成了好了大量的数据库、消息队列等中间件,在使用时只需要引入依赖和在properties配置文件中进行极少的配置,即可实现开箱即用。

这些中间件都会有大量的默认配置值,减少了显示配置,体现SpringBoot简单易用的同时,也体现出其约定大于配置的设计理念。

SpringBoot内置了Tomcat容器,实现构建的jar包通过java -jar命令即可直接运行,无需额外安装Tomcat和配置。

SpringBoot的核心注解是@SpringBootApplication。

@SpringBootApplication注解又是由@EnableAutoConfiguration注解、@ComponentScan注解、@Configuration注解。

@Configuration注解用于标识@SpringBootApplication标识的启动类是Spring的一个配置类。

@EnableAutoConfiguration是自动配置启动注解,会根据配置类指定路径里的对象依赖关系,自动加载组件,SpringBoot集成的中间件,实现引入依赖就可直接使用,就是依靠的自动配置。

@ComponentScan注解是扫描指定路径包下面带有@Component、@Controller、@Service,然后根据条件配置注解@ConditionOnXXX,判断将所需的Bean对象归类到IOC容器里统一管理。

版本二

Spring Boot 的核心定位是 “简化 Spring 应用的初始搭建和开发”

它主要通过三大特性来实现这个目标:

  1. 自动配置:项目引入哪个组件的 Starter 依赖,Spring Boot 就会根据类路径自动配置好这个组件,基本不用手动写配置,实现了 “开箱即用”
  2. 内嵌服务器:它直接把 Tomcat 等服务器打包到应用中,最终项目是一个jar包,用 java -jar 命令就能直接运行,无需额外部署
  3. 核心注解:这一切的起点是 @SpringBootApplication 注解,它整合了:
    • @ComponentScan(扫描本包组件)
    • @EnableAutoConfiguration开启自动配置的核心

总结,Spring Boot 通过 “约定大于配置” 的理念,用自动配置和内嵌容器,极大地降低了开发门槛。

Springboot的自动配置原理

Spring Boot 自动配置的核心是 @EnableAutoConfiguration 注解,是 @SpringBootApplication 的三个核心注解之一。

@EnableAutoConfiguration 是开启自动配置的核心,@EnableAutoConfiguration 的核心又是 @Import 注解导入的 AutoConfigurationImportSelector 自动配置导入选择器,他会自动去META-INF目录下的 spring.factories 文件(后被新机制 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports替代)找到指定的配置类。

然后根据自定义配置类里的 @ConditionalOnClass@ConditionalOnProperty@ConditionalOnMissingBean 条件注解进行bean扫描和创建。

SpringBoot是怎么通过main方法启动web项目的

表层是通过SpringBootApplication.run方法。

深层是因为@SpringBootApplication注解里的自动配置注解EnableAutoConfiguration,所以会根据项目依赖的spring-boot-starter-web依赖,自动创建并配置内置的web服务器。

运行run方法时会启动一个Spring容器,会创建一个应用上下文ApplicationContext,因为是扫描到有starter-web依赖,是web服务,所以创建的是AnnotationConfigServletWebServerApplicationContext ,通过ApplicationContextFactory工厂创建的上下文。

在创建了 AnnotationConfigServletWebServerApplicationContext 上下文之后,会去执行这个上下文的父类 ServletWebServerApplicationContextrefresh 方法,再调用到 onRefresh 方法。

最终会调用到 createWebServer() ,在这个方法里会通过 ServletWebServerFactory 工厂创建一个 TomcatWebServer ,就完成了内嵌web服务器的创建与启动 。