@SpringBootApplication 注解详解

目录

[一、@SpringBootApplication 是什么?](#一、@SpringBootApplication 是什么?)

[二、@SpringBootApplication 的核心组成](#二、@SpringBootApplication 的核心组成)

三、@Configuration:声明配置类

四、@ComponentScan:组件扫描

五、@EnableAutoConfiguration:开启自动装配(核心)

六、为什么一个注解就能跑起来?

七、总结


在 Spring Boot 项目中,几乎所有应用的启动类上都会看到这样一个注解:

java 复制代码
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

很多人知道"有它项目就能启动",但它究竟做了什么,却并不清楚。

一、@SpringBootApplication 是什么?

@SpringBootApplication 是 Spring Boot 提供的一个组合注解,它并不是一个"新能力",而是对多个核心注解的整合。

一个注解,完成 Spring Boot 应用启动所需的核心配置。

二、@SpringBootApplication 的核心组成

从源码角度看,它等价于以下三个注解的组合:

java 复制代码
@Configuration
@EnableAutoConfiguration
@ComponentScan

这三个注解,分别解决了 Spring Boot 启动过程中的三件关键事情。

三、@Configuration:声明配置类

@Configuration 表示当前类是一个 Spring 配置类

等价于传统 Spring 中的 XML 配置文件。

作用:

  • 允许在类中使用 @Bean
  • 将该类纳入 Spring 容器管理

这是 Spring Boot 仍然基于 Spring 的体现。

四、@ComponentScan:组件扫描

@ComponentScan 用于开启组件扫描机制。

默认行为:

  • 扫描 启动类所在包及其子包
  • 自动注册:
    • @Component
    • @Service
    • @Repository
    • @Controller

这也是为什么启动类通常放在根包下

五、@EnableAutoConfiguration:开启自动装配(核心)

这是 @SpringBootApplication 中最关键的部分

作用:告诉 Spring Boot:请根据当前环境和依赖,自动配置应用所需的 Bean。

它的底层实现依赖:

java 复制代码
@Import(AutoConfigurationImportSelector.class)

自动装配大致流程

  1. 扫描 classpath
  2. 加载自动配置类
  3. 条件注解判断是否生效
  4. 注册 Bean 到容器

数据源、MVC、Tomcat、Jackson 等,都是在这里自动配置的。

六、为什么一个注解就能跑起来?

因为:

  • @Configuration → 提供配置入口
  • @ComponentScan → 发现并注册业务组件
  • @EnableAutoConfiguration → 补齐基础设施组件

三者协作,构成了一个完整的 Spring Boot 启动基础。

七、总结

@SpringBootApplication 是 Spring Boot 应用的启动核心,它通过组合配置、扫描和自动装配,构建了应用运行所需的基础环境。

相关推荐
知无不研几秒前
lambda表达式的使用(3)
开发语言·c++·lambda
数智化管理手记10 分钟前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
cfm_291430 分钟前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统1 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
C++ 老炮儿的技术栈2 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_448011162 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据2 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
0x532 小时前
Java网络编程(二)
java·服务器·网络
zlinear数据采集卡2 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Flittly3 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring