📌 一、自动装配的定义

Spring Boot 自动装配是一种 约定优于配置 的机制,它能根据你当前项目中的依赖,自动地帮你配置 Spring 容器中的 Bean,大大简化了开发过程中的配置工作。


🧠 二、核心注解与原理

1. @SpringBootApplication

这是 Spring Boot 的启动注解,等价于:

@Configuration
@EnableAutoConfiguration
@ComponentScan

其中关键的是 @EnableAutoConfiguration


2. @EnableAutoConfiguration

这个注解的作用是 启用自动配置机制

它的底层逻辑:

  • 通过 SpringFactoriesLoader 加载类路径下:

    META-INF/spring.factories(Spring Boot 2.x)
    META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 3.x)
    
  • 找到所有的自动配置类(例如:RedisAutoConfigurationWebMvcAutoConfiguration 等)

  • 判断当前项目是否引入了相关依赖(例如是否有 redis 相关 jar)

  • 满足条件就自动注册对应的 Bean


3. 自动配置类举例

  • DataSourceAutoConfiguration:数据库连接池配置

  • RedisAutoConfiguration:Redis 配置

  • WebMvcAutoConfiguration:SpringMVC 配置

  • JacksonAutoConfiguration:JSON 序列化配置

每个自动配置类通常都包含:

  • @ConditionalOnClass:存在某个类时才生效

  • @ConditionalOnMissingBean:容器中不存在某个 Bean 时才注入

  • @ConfigurationProperties:读取配置文件中的属性(如 application.yml


⚙️ 三、典型流程简图

  1. 引入某个 starter,例如 spring-boot-starter-data-redis

  2. @EnableAutoConfiguration 会扫描所有 spring.factories 中的配置类

  3. 检查是否满足配置条件(是否有依赖、配置文件是否配置了参数等)

  4. 自动将配置类中声明的 Bean 注入容器中

  5. 如果你显式定义了某个 Bean,它就不会再自动配置(防止冲突)


✅ 四、自动装配的优点

  • 简化配置:无需手动配置大量 XML 或 Java Config

  • 开箱即用:加入依赖即可使用,默认行为合理

  • 灵活可扩展:你仍然可以自定义覆盖默认配置


🔍 五、如何查看有哪些自动配置类?

方法一:查看 spring-boot-autoconfigure 包中的配置类(如 RedisAutoConfiguration

方法二:启动日志中搜索:

Positive matches(命中自动配置)
Negative matches(未命中)

方法三:使用 spring-boot-actuator 提供的 /actuator/conditions(需开启)


🔧 六、禁用某些自动配置类

使用 @SpringBootApplication(exclude = { XXXAutoConfiguration.class })

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })

🧪 七、如何自定义自动配置类?

自定义自动配置步骤:

  1. 创建配置类,加上 @Configuration

  2. 加上条件注解(如 @ConditionalOnClass, @ConditionalOnMissingBean

  3. resources/META-INF/spring.factories(或 3.x 用 imports)中手动注册:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.config.MyCustomAutoConfiguration

📝 总结一句话

Spring Boot 自动装配就是:根据当前项目环境自动注入合适的 Bean,不需要你手动写配置,能自动就自动,不能自动再手动。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐