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

相关推荐
IT 行者7 分钟前
Web逆向工程AI工具:JSHook MCP,80+专业工具让Claude变JS逆向大师
开发语言·javascript·ecmascript·逆向
程序员 沐阳2 小时前
JavaScript 内存与引用:深究深浅拷贝、垃圾回收与 WeakMap/WeakSet
开发语言·javascript·ecmascript
pshdhx_albert2 小时前
AI agent实现打字机效果
java·http·ai编程
Mr_Xuhhh2 小时前
Java泛型进阶:从基础到高级特性完全指南
开发语言·windows·python
沉鱼.442 小时前
第十二届题目
java·前端·算法
He1955013 小时前
wordpress搭建块
开发语言·wordpress·古腾堡·wordpress块
老天文学家了3 小时前
蓝桥杯备战Python
开发语言·python
赫瑞3 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
初夏睡觉4 小时前
c++1.3(变量与常量,简单数学运算详解),草稿公放
开发语言·c++
升职佳兴4 小时前
C盘爆满自救:3步无损迁移应用数据到E盘(含回滚)
c语言·开发语言