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

相关推荐
heartbeat..4 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
5 小时前
java关于内部类
java·开发语言
好好沉淀5 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
gusijin5 小时前
解决idea启动报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
To Be Clean Coder5 小时前
【Spring源码】createBean如何寻找构造器(二)——单参数构造器的场景
java·后端·spring
lsx2024065 小时前
FastAPI 交互式 API 文档
开发语言
吨~吨~吨~5 小时前
解决 IntelliJ IDEA 运行时“命令行过长”问题:使用 JAR
java·ide·intellij-idea
你才是臭弟弟5 小时前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端
短剑重铸之日5 小时前
《设计模式》第二篇:单例模式
java·单例模式·设计模式·懒汉式·恶汉式
VCR__5 小时前
python第三次作业
开发语言·python