springboot面试题
SpringBoot注解
@SpringBootApplication
@EnableAutoConfiguration
springboot自动配置原理
@SpringBootApplication 是一个复合注解,结合了以下三个核心注解的功能,用于简化 Spring Boot 应用的启动类配置:
-
@SpringBootConfiguration
-
@EnableAutoConfiguration
-
@ComponentScan
通常作为主类注解使用,标记 Spring Boot 应用的入口。
@SpringBootConfiguration
表明当前类是一个 Spring Boot 的配置类,继承自 @Configuration
注解。用于定义 Bean 的配置方法,替代传统 XML 配置方式。
@EnableAutoConfiguration
启用 Spring Boot 的自动配置机制。根据项目依赖(如 JPA、Redis 等)自动配置 Spring 应用的上下文,减少手动配置。
@ComponentScan
自动扫描指定包及其子包下的组件(如 @Component
, @Service
, @Repository
, @Controller
等),并将它们注册为 Spring Bean。默认扫描当前类所在包。
Spring Boot 自动配置原理超简版解释
想象 Spring Boot 自动配置就像一个智能家电安装师傅,它会根据你家里的电器(项目中的依赖)自动帮你接线(配置),你只需要按下开关(主类上的 @SpringBootApplication
)就能用了。具体来说:
极简版工作流程
-
检查工具箱(扫描classpath):
- 师傅先看你家有哪些电器(检查pom.xml中的依赖)
- 比如发现你有
spring-boot-starter-data-jpa
→ 知道你要用数据库
-
查说明书(
spring.factories
):- 师傅包里有个万能说明书(
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
) - 找到对应电器的安装指南(如
JpaAutoConfiguration
)
- 师傅包里有个万能说明书(
-
看你的要求(条件装配):
- 用各种
@Conditional
检查:
@ConditionalOnClass(DataSource.class) // 你家有水管才装热水器 @ConditionalOnMissingBean(DataSource.class) // 你自己没带水管才用我的
- 用各种
-
自动接线(创建Bean):
- 如果所有条件满足,就自动把线接好(创建并配置好DataSource、EntityManager等)
-
给你遥控器(属性配置):
- 你可以通过
application.yml
调整参数:
spring: datasource: url: jdbc:mysql://localhost:3306/mydb
- 你可以通过
关键比喻
技术概念 | 生活比喻 |
---|---|
@EnableAutoConfiguration | 告诉师傅"开始自动安装吧" |
AutoConfiguration | 各种电器的安装说明书 |
@Conditional | 师傅的智能判断规则 |
starter | 已经打包好的电器套装 |
记住三个最核心的:
- 约定大于配置:只要你按标准带依赖(starter),它就按默认最佳实践配好
- 随时可覆盖:所有自动配置你都能自己重新定义(用
@Bean
) - 透明可追溯:启动时加
--debug
参数能看到所有自动配置报告
下次看到自动配置,就想象是这个师傅在问:"你要用数据库吗?→ 有相关类吗?→ 没自己配过吧?→ 那我给你配个最常用的咯!"