当前位置: 首页 > news >正文

spring @SpringBootApplication 注解详解

@SpringBootApplication 注解详解


1. 核心作用

@SpringBootApplicationSpring Boot 的核心注解,用于标记一个类作为 Spring Boot 应用的启动入口。它集成了以下三个注解的功能,简化了配置:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication { ... }

2. 组成注解详解
组成注解作用
@SpringBootConfiguration等同于 @Configuration,表明该类是一个配置类,允许通过 @Bean 定义 bean。
@EnableAutoConfiguration启用 Spring Boot 的自动配置机制,根据类路径依赖加载默认配置(如数据库、Web 等)。
@ComponentScan扫描组件,自动注册 @Component@Service@Repository@Controller 等注解的 bean。

3. 完整代码示例
// 启动类(需放置在根包下,以便扫描子包)
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        // 启动 Spring Boot 应用
        SpringApplication.run(Application.class, args);
    }
}

关键点

  1. 启动入口main 方法通过 SpringApplication.run() 启动应用。
  2. 包结构:默认扫描启动类所在包及其子包中的组件(可通过 @ComponentScan(basePackages = "com.example") 自定义)。

4. 自动配置原理
  • @EnableAutoConfiguration
    • 根据类路径中的依赖(如 spring-boot-starter-web)加载对应的自动配置类(如 WebMvcAutoConfiguration)。
    • 通过 @Conditional 注解(如 @ConditionalOnClass@ConditionalOnMissingBean)条件化启用配置。
    • 配置文件(如 application.properties)可覆盖默认值。

示例
若项目依赖 spring-boot-starter-data-jpa,则会自动配置 DataSourceEntityManager 等。


5. 参数配置

@SpringBootApplication 提供参数自定义:

@SpringBootApplication(
    exclude = {DataSourceAutoConfiguration.class}, // 排除某些自动配置
    scanBasePackages = {"com.example.service", "com.example.repo"} // 自定义扫描包
)
public class Application { ... }

6. 常见问题
  • Q:为什么需要放在根包下?
    • 默认 @ComponentScan 从标注类的包开始扫描,若组件在父包则无法被发现。
  • Q:如何禁用某项自动配置?
    • 使用 exclude 参数或在 application.properties 中配置 spring.autoconfigure.exclude=...
  • Q:能否扩展自定义配置?
    • 可通过 @Configuration 类配合 @EnableConfigurationProperties 等注解扩展。

7. 对比表格:组成注解的功能差异
注解核心功能
@SpringBootConfiguration定义配置类,声明 @Bean 方法。
@EnableAutoConfiguration根据依赖自动配置 Spring 上下文,减少手动配置。
@ComponentScan自动发现并注册 Spring 组件(如 @Service@Controller)。

总结

@SpringBootApplication 是 Spring Boot 的核心注解,通过整合三个注解,实现了 配置简化自动装配组件扫描 的功能。它是快速构建 Spring Boot 应用的基础,推荐始终放在根包的启动类上。

相关文章:

  • 使用AURIX ADS部署tensorflow lite到Tricore TC2XX/TC3XX
  • EMC知识学习三
  • ecovadis评估有什么流程?对企业发展的重要意义
  • HTML应用指南:利用GET请求获取全国无印良品门店位置信息
  • 19726 星际旅行
  • 【SDMs分析1】基于ENMTools R包的生态位分化分析和图像绘制(identity.test())
  • <wbr>标签的用途,在处理长文本换行时如何发挥作用?
  • 算法 | 河马优化算法原理,公式,应用,算法改进及研究综述,matlab代码
  • Android WLAN offload Data Supplementary Service
  • Centos8 系統Lnmp服務器環境搭建
  • 高效加盖骑缝章:PDF文件处理的实用解决方案
  • 跨境TRS投资操作指南与系统解决方案
  • EspressoSample深度解析:在CircleCI上高效运行Android UI测试
  • 【Linux】kylin桌面进入pe模式,livecd模式
  • DTMF从2833到inband的方案
  • arm64位FFmpeg与X264库
  • 详细解析int GetLength() const;声明中的const是修饰什么的?
  • JDBC FetchSize不生效,批量变全量致OOM问题分析
  • CLion下载安装(Windows11)
  • Sa-Token核心功能解剖二( Session会话、 持久层Redis扩展 、全局侦听器 、全局过滤器、多账号体系认证、单点登录)
  • 美国失去最后一个AAA评级,资产价格怎么走?美股或将触及天花板
  • 在美国,为什么夏季出生的孩子更容易得流感?
  • 俄乌直接谈判结束,乌称“毫无成果”
  • 总奖金池百万!澎湃与七猫非虚构写作与现实题材征文大赛征稿启动
  • 银行积分大幅贬值遭质疑,涉及工行、中行、农行等
  • 泽连斯基已离开土耳其安卡拉