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

相关推荐
杨运交9 小时前
[041][公共模块]分布式唯一ID生成器设计与实现:一款灵活可扩展的雪花算法框架
spring boot
亦暖筑序9 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏9 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev10 小时前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还1 天前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩1 天前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia1 天前
Mybatis的日志输入
java
亦暖筑序1 天前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户298698530141 天前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao1 天前
14:Servlet中的页面跳转-Java Web
java·后端·架构