@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 应用的启动核心,它通过组合配置、扫描和自动装配,构建了应用运行所需的基础环境。

相关推荐
二哈赛车手1 天前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
为何创造硅基生物1 天前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好1 天前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~1 天前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李1 天前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8291 天前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅1 天前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆1 天前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
未若君雅裁1 天前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
cen__y1 天前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git