Skip to content

SpringBoot面试题 ​

整理SpringBoot相关的面试题,涵盖自动配置、启动流程、Starter机制等核心知识点,包含详细的答案和解析。

📋 题目分类 ​

🎯 一、自动配置 ​

1. SpringBoot自动配置的原理? ​

答案:

SpringBoot自动配置的核心:

  1. @EnableAutoConfiguration注解

    • 通过@Import导入AutoConfigurationImportSelector
  2. AutoConfigurationImportSelector

    • 从META-INF/spring.factories加载自动配置类
    • 根据条件注解过滤配置类
  3. 条件注解

    • @ConditionalOnClass:类路径存在指定类
    • @ConditionalOnBean:容器中存在指定Bean
    • @ConditionalOnProperty:配置属性满足条件
  4. 自动配置类

    • 使用@Configuration标识
    • 使用条件注解控制加载
    • 通过@Bean方法创建Bean

2. 如何自定义自动配置? ​

答案:

自定义自动配置步骤:

  1. 创建配置类

    java
    @Configuration
    @ConditionalOnClass(DataSource.class)
    @EnableConfigurationProperties(DataSourceProperties.class)
    public class DataSourceAutoConfiguration {
        @Bean
        @ConditionalOnMissingBean
        public DataSource dataSource(DataSourceProperties properties) {
            return properties.initializeDataSourceBuilder().build();
        }
    }
  2. 注册配置类

    • 在META-INF/spring.factories中注册
    properties
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.example.autoconfigure.DataSourceAutoConfiguration
  3. 配置属性类

    java
    @ConfigurationProperties(prefix = "spring.datasource")
    public class DataSourceProperties {
        // 配置属性
    }

🎯 二、启动流程 ​

3. SpringBoot启动流程? ​

答案:

SpringBoot启动流程:

  1. 创建SpringApplication实例

    • 推断应用类型
    • 加载ApplicationContextInitializer
    • 加载ApplicationListener
  2. 运行run方法

    • 准备Environment
    • 创建ApplicationContext
    • 准备ApplicationContext
    • 刷新ApplicationContext
    • 调用ApplicationRunner和CommandLineRunner
  3. 刷新ApplicationContext

    • prepareRefresh:准备刷新
    • obtainFreshBeanFactory:获取BeanFactory
    • prepareBeanFactory:准备BeanFactory
    • invokeBeanFactoryPostProcessors:处理BeanFactoryPostProcessor
    • registerBeanPostProcessors:注册BeanPostProcessor
    • finishBeanFactoryInitialization:完成BeanFactory初始化

4. SpringBoot的启动类和普通类有什么区别? ​

答案:

启动类的特点:

  1. @SpringBootApplication注解

    • 包含@Configuration、@EnableAutoConfiguration、@ComponentScan
  2. main方法

    • 作为程序的入口点
    • 调用SpringApplication.run()
  3. 主类推断

    • SpringBoot会推断main方法所在的类为主类
    • 用于自动配置的包扫描

🎯 三、Starter机制 ​

5. SpringBoot Starter的作用? ​

答案:

Starter的作用:

  1. 依赖管理

    • 将相关依赖打包成一个Starter
    • 简化依赖配置
  2. 自动配置

    • 提供默认配置
    • 自动配置Bean
  3. 约定优于配置

    • 零配置可用
    • 可通过配置文件覆盖

6. 如何自定义Starter? ​

答案:

自定义Starter步骤:

  1. 创建项目结构

    my-starter/
    ├── pom.xml
    └── src/main/java/
        └── com/example/
            └── autoconfigure/
                ├── MyAutoConfiguration.java
                └── MyProperties.java
  2. 编写自动配置类

    java
    @Configuration
    @ConditionalOnClass(MyService.class)
    @EnableConfigurationProperties(MyProperties.class)
    public class MyAutoConfiguration {
        @Bean
        @ConditionalOnMissingBean
        public MyService myService(MyProperties properties) {
            return new MyService(properties);
        }
    }
  3. 注册自动配置类

    • 在META-INF/spring.factories中注册
  4. 打包发布

    • 打包成jar文件
    • 发布到Maven仓库

📖 学习资源 ​

视频教程 ​

书籍推荐 ​

  • 《Spring Boot实战》 - 汪云飞

网站资源 ​

✅ 学习检查清单 ​

  • [ ] 已理解自动配置原理
  • [ ] 已理解启动流程
  • [ ] 已掌握Starter机制
  • [ ] 已练习常见SpringBoot面试题
  • [ ] 已总结答题技巧

上一章节:Spring框架面试题
下一章节:微服务面试题
返回目录:面试题