Springboot自动配置,一次说清楚
以 Spring Boot 的数据源(DataSource)自动配置为例,完整的逻辑链如下:
一、核心流程
-
@EnableAutoConfiguration的作用
@EnableAutoConfiguration是 Spring Boot 自动配置的“总开关”,过注解引入了AutoConfigurationImportSelector这个核心类。
其作用是:触发 Spring 扫描并加载所有META-INF/spring.factories文件中声明的自动配置类(包括DataSourceAutoConfiguration)。 -
DataSourceAutoConfiguration的触发条件
DataSourceAutoConfiguration是spring-boot-autoconfigure包中内置的数据源自动配置类,它的生效依赖基础的条件:- 类路径存在数据源相关类:如
javax.sql.DataSource(JDK 内置接口)、HikariDataSource(默认连接池,来自spring-boot-starter-jdbc)等(通过@ConditionalOnClass注解判断)。 - 没有用户自定义的
DataSourceBean(通过@ConditionalOnMissingBean确保用户配置优先)。
也就是说,只要引入了包含数据源实现的依赖(如
spring-boot-starter-jdbc或spring-boot-starter-data-jpa),DataSourceAutoConfiguration才能触发。 - 类路径存在数据源相关类:如
-
spring-boot-starter-jpa的角色
spring-boot-starter-jpa是一个“场景 starter”,它的核心作用是:- 依赖传递:包含
spring-boot-starter-jdbc(提供基础数据源、连接池依赖,如 HikariCP)、hibernate-core(JPA 实现)等,因此引入它会间接满足DataSourceAutoConfiguration对“数据源类存在”的条件。 - 触发 JPA 相关自动配置:除了触发
DataSourceAutoConfiguration,还会触发HibernateJpaAutoConfiguration(JPA 专属配置,如实体类扫描、事务管理等)。
- 依赖传递:包含
-
完整逻辑链
项目引入 spring-boot-starter-jpa → 该 starter 依赖 spring-boot-starter-jdbc → spring-boot-starter-jdbc 引入 HikariCP(数据源实现)和 javax.sql.DataSource 接口 → Spring Boot 启动时,@EnableAutoConfiguration 扫描到 DataSourceAutoConfiguration(来自 spring-boot-autoconfigure) → DataSourceAutoConfiguration 检查到类路径存在 DataSource、HikariDataSource,且用户未自定义 DataSource → 自动配置生效:创建默认的 HikariDataSource Bean(读取 application.properties 中的 spring.datasource.* 配置) → 同时,JPA 相关的自动配置(HibernateJpaAutoConfiguration)也因 JPA 类存在而生效
三、总结
自动配置的核心是 @EnableAutoConfiguration 扫描 spring.factories 中的配置类,结合 @Conditional 条件判断决定是否生效。
这种设计既保证了“引入 starter 即能用”的便捷性,又通过 @ConditionalOnMissingBean 保留了用户自定义的灵活性(如手动配置 DataSource 会覆盖自动配置)。

浙公网安备 33010602011771号