SpringBoot面试题
整理SpringBoot相关的面试题,涵盖自动配置、启动流程、Starter机制等核心知识点,包含详细的答案和解析。
📋 题目分类
🎯 一、自动配置
1. SpringBoot自动配置的原理?
答案:
SpringBoot自动配置的核心:
@EnableAutoConfiguration注解
- 通过@Import导入AutoConfigurationImportSelector
AutoConfigurationImportSelector
- 从META-INF/spring.factories加载自动配置类
- 根据条件注解过滤配置类
条件注解
- @ConditionalOnClass:类路径存在指定类
- @ConditionalOnBean:容器中存在指定Bean
- @ConditionalOnProperty:配置属性满足条件
自动配置类
- 使用@Configuration标识
- 使用条件注解控制加载
- 通过@Bean方法创建Bean
2. 如何自定义自动配置?
答案:
自定义自动配置步骤:
创建配置类
java@Configuration @ConditionalOnClass(DataSource.class) @EnableConfigurationProperties(DataSourceProperties.class) public class DataSourceAutoConfiguration { @Bean @ConditionalOnMissingBean public DataSource dataSource(DataSourceProperties properties) { return properties.initializeDataSourceBuilder().build(); } }注册配置类
- 在META-INF/spring.factories中注册
propertiesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.autoconfigure.DataSourceAutoConfiguration配置属性类
java@ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties { // 配置属性 }
🎯 二、启动流程
3. SpringBoot启动流程?
答案:
SpringBoot启动流程:
创建SpringApplication实例
- 推断应用类型
- 加载ApplicationContextInitializer
- 加载ApplicationListener
运行run方法
- 准备Environment
- 创建ApplicationContext
- 准备ApplicationContext
- 刷新ApplicationContext
- 调用ApplicationRunner和CommandLineRunner
刷新ApplicationContext
- prepareRefresh:准备刷新
- obtainFreshBeanFactory:获取BeanFactory
- prepareBeanFactory:准备BeanFactory
- invokeBeanFactoryPostProcessors:处理BeanFactoryPostProcessor
- registerBeanPostProcessors:注册BeanPostProcessor
- finishBeanFactoryInitialization:完成BeanFactory初始化
4. SpringBoot的启动类和普通类有什么区别?
答案:
启动类的特点:
@SpringBootApplication注解
- 包含@Configuration、@EnableAutoConfiguration、@ComponentScan
main方法
- 作为程序的入口点
- 调用SpringApplication.run()
主类推断
- SpringBoot会推断main方法所在的类为主类
- 用于自动配置的包扫描
🎯 三、Starter机制
5. SpringBoot Starter的作用?
答案:
Starter的作用:
依赖管理
- 将相关依赖打包成一个Starter
- 简化依赖配置
自动配置
- 提供默认配置
- 自动配置Bean
约定优于配置
- 零配置可用
- 可通过配置文件覆盖
6. 如何自定义Starter?
答案:
自定义Starter步骤:
创建项目结构
my-starter/ ├── pom.xml └── src/main/java/ └── com/example/ └── autoconfigure/ ├── MyAutoConfiguration.java └── MyProperties.java编写自动配置类
java@Configuration @ConditionalOnClass(MyService.class) @EnableConfigurationProperties(MyProperties.class) public class MyAutoConfiguration { @Bean @ConditionalOnMissingBean public MyService myService(MyProperties properties) { return new MyService(properties); } }注册自动配置类
- 在META-INF/spring.factories中注册
打包发布
- 打包成jar文件
- 发布到Maven仓库
📖 学习资源
视频教程
书籍推荐
- 《Spring Boot实战》 - 汪云飞
网站资源
✅ 学习检查清单
- [ ] 已理解自动配置原理
- [ ] 已理解启动流程
- [ ] 已掌握Starter机制
- [ ] 已练习常见SpringBoot面试题
- [ ] 已总结答题技巧
上一章节:Spring框架面试题
下一章节:微服务面试题
返回目录:面试题