乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 Spring Boot 概述

    • 章节导读:Spring Boot概述与核心理念
    • Spring Boot是什么
    • Spring Boot与Spring Framework的关系
    • 约定优于配置
  • 第2章 快速入门与第一个应用

    • 章节导读:快速入门与第一个应用
    • SpringApplication
    • 第一个Spring Boot应用
  • 第3章 起步依赖与版本管理

    • 章节导读:起步依赖与版本管理
    • 起步依赖
    • BOM版本管理
  • 第4章 自动配置原理

    • 章节导读:自动配置原理
    • 自动配置原理
    • AutoConfigurationImportSelector
    • 自动配置报告
  • 第5章 核心注解

    • 章节导读:核心注解
    • @SpringBootApplication
    • @EnableAutoConfiguration
    • @ConditionalOnClass
    • @ConditionalOnMissingBean
    • @ConditionalOnBean
    • @ConditionalOnProperty
  • 第6章 外部化配置与属性绑定

    • 章节导读:外部化配置与属性绑定
    • 外部化配置
    • @ConfigurationProperties
    • @Value
    • 配置属性优先级
  • 第7章 Profile 与环境切换

    • 章节导读:Profile与环境切换
    • @Profile
    • 多环境配置文件
  • 第8章 内嵌服务器与部署

    • 章节导读:内嵌服务器与部署
    • 内嵌服务器
    • Fat Jar
  • 第9章 Actuator 与监控

    • 章节导读:Actuator与监控
    • Actuator Health
    • Actuator Info
    • Actuator Metrics
    • 自定义Endpoint
    • 自定义HealthIndicator
  • 第10章 开发工具与最佳实践

    • 章节导读:开发工具与最佳实践
    • Banner自定义
    • 热部署

"小崔在排查自动配置问题时问:'白歌,为什么@DataSourceAutoConfiguration有时生效有时不生效?'白歌说:'因为它头顶有一排条件注解在把关。只有吃透这些条件注解,你才能真正驾驭自动配置。'这一章,我们将逐个拆解 Spring Boot 自动配置的'决策单元'——核心条件注解。"

章节导读:核心注解

本章定位

本章解决的核心问题:Spring Boot 如何通过 @Conditional 条件注解家族,实现"按需装配、用户优先、配置可控"的智能自动配置决策。

学习路线图

学习顺序说明:先理解 @SpringBootApplication 这个"三合一门面"的拆解与执行时序 → 深入 @EnableAutoConfiguration 这个自动配置引擎的点火开关 → 然后逐一吃透四大条件注解:@ConditionalOnClass(类路径探测器)、@ConditionalOnMissingBean(用户优先守卫)、@ConditionalOnProperty(配置开关)、@ConditionalOnBean(容器依赖链)。这些注解是自动配置"智能决策"的底层逻辑单元。

文件关系说明

文件一句话角色
SpringBootApplication.md三合一组合注解:集 @Configuration、@EnableAutoConfiguration、@ComponentScan 于一体,是 Spring Boot 应用的入口印章。
EnableAutoConfiguration.md自动配置引擎的点火开关,通过 @Import 触发 AutoConfigurationImportSelector,从 spring.factories 加载候选配置类。
ConditionalOnClass.md类路径探测器:只有当指定类存在于类路径中时,才启用当前配置——是"按需加载"的第一道闸门。
ConditionalOnMissingBean.md用户配置优先守卫:只有当容器中不存在某 Bean 时,自动配置才创建默认实现——实现"用户自定义覆盖默认配置"。
ConditionalOnProperty.md配置属性开关:通过 application.yml 中的属性值控制功能启用/禁用,实现"配置驱动行为"。
ConditionalOnBean.md容器存在性条件:只有当容器中已存在某 Bean 时,当前配置才生效——在自动配置类之间建立依赖链。

知识图谱

核心逻辑:@SpringBootApplication 是门面,@EnableAutoConfiguration 是引擎,四个条件注解是引擎的"决策阀门"。只有当所有阀门同时放行,候选配置类才能最终被注册为 Bean。@ConditionalOnClass 回答"依赖有了吗",@ConditionalOnMissingBean 回答"用户已经自定义了吗",@ConditionalOnProperty 回答"配置开关打开了吗",@ConditionalOnBean 回答"前置依赖准备好了吗"。

与上下章的衔接

上一章回顾:你理解了自动配置从 @EnableAutoConfiguration 到 spring.factories 再到 Bean 注册的完整流水线。本章将深入流水线上的"阀门系统"——条件注解,它们是自动配置"为什么生效/为什么不生效"的终极答案。

下一章预告:本章学完后,你已经掌握自动配置的决策逻辑。下一章「外部化配置与属性绑定」将学习如何通过 application.yml 和 @ConfigurationProperties 将外部配置注入到应用中,实现"同一份代码,多套环境运行"——条件注解负责"是否加载",外部化配置负责"加载后用什么参数"。

下一页
@SpringBootApplication