Java开发-面试题-0026-Spring Boot 自动配置原理
更多内容欢迎关注我(持续更新中,欢迎Star✨)
Github:CodeZeng1998/Java-Developer-Work-Note
(技术)微信公众号:CodeZeng1998
(生活)微信公众号:好锅
其他平台:CodeZeng1998、好锅
Spring Boot 自动配置原理
Spring Boot 的自动配置原理是通过 @EnableAutoConfiguration
注解及其背后的机制来实现的,它能够自动配置应用程序的基础设施和常用组件,减少了开发者手动配置的工作量。
自动配置的核心原理
-
@EnableAutoConfiguration
注解:- 这是 Spring Boot 自动配置的核心注解。它用于启用自动配置功能,通常与
@SpringBootApplication
注解一起使用。@SpringBootApplication
实际上是一个组合注解,包含了@EnableAutoConfiguration
、@ComponentScan
和@Configuration
。
- 这是 Spring Boot 自动配置的核心注解。它用于启用自动配置功能,通常与
-
spring.factories
文件:-
Spring Boot 自动配置是通过
spring-boot-autoconfigure
包中的META-INF/spring.factories
文件实现的。该文件中定义了许多EnableAutoConfiguration
的自动配置类。这些类会在应用启动时被 Spring Boot 自动加载并初始化。 -
spring.factories
文件格式如下:org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\ ...
-
这些类实现了具体的自动配置逻辑。
-
-
@Conditional
注解族:- 每个自动配置类通常使用
@Conditional
系列注解(如@ConditionalOnClass
、@ConditionalOnMissingBean
、@ConditionalOnProperty
等)来决定是否加载某个配置类。这些注解会根据类路径中是否存在某个类、Spring 环境中是否存在某个Bean
、是否有特定的属性配置等条件,决定是否进行相应的配置。
- 每个自动配置类通常使用
-
自动配置流程:
- 启动阶段:当 Spring Boot 应用启动时,
@EnableAutoConfiguration
注解触发自动配置机制,Spring Boot 扫描spring.factories
文件,并加载其中的所有自动配置类。 - 条件匹配:对于每个自动配置类,Spring Boot 逐个检查其上的条件注解。如果所有条件都满足,则会将该自动配置类中的
@Bean
方法加载到 Spring 容器中,注册为Bean
。 - 最终配置:通过这种机制,Spring Boot 自动配置了应用所需的许多常见组件,例如数据源、事务管理器、MVC 配置等。
- 启动阶段:当 Spring Boot 应用启动时,
自动配置的示例
例如,DataSourceAutoConfiguration
是一个自动配置数据源的类,它的原理如下:
-
在
spring.factories
文件中有如下定义: