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

【Spring Boot 注解】@SpringBootApplication

文章目录

  • @SpringBootApplication注解
    • 一、简介
    • 二、使用
      • 1.指定要扫描的包

@SpringBootApplication注解

一、简介

@SpringBootApplication 是 Spring Boot 提供的一个注解,通常用于启动类(主类)上,它是三个注解的组合:
1.@Configuration
表示该类是一个配置类,等价于 XML 配置文件。

2.@EnableAutoConfiguration
告诉 Spring Boot 启动自动配置功能,根据类路径下的依赖、配置等自动配置 Spring 应用。

3.@ComponentScan
启动组件扫描,默认扫描当前类所在包及其子包,将标注了如 @Component、@Service、@Repository、@Controller 等注解的类注入 Spring 容器。

二、使用

1.指定要扫描的包

默认情况下,@SpringBootApplication 会从它所在的包开始向下递归扫描所有子包中的组件(如 @Component@Service@Repository@Controller@Configuration 等)。

如果你的项目中有一些组件不在 @SpringBootApplication 所在包的子包里,就需要手动设置 scanBasePackages 来指定需要扫描的包路径。
示例如下:

@SpringBootApplication(scanBasePackages = {"com.demo.module.system", "com.demo.module.infra"})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

使用场景

  • 你的启动类 MyApplication 不在 com.demo 包下,比如它在 com.demo.core,而系统模块和基础设施模块分别在 com.demo.module.system 和 com.demo.module.infra 中。这种情况下,默认的扫描不会覆盖 module.system 和 module.infra,你就需要手动指定 scanBasePackages
  • 你只希望扫描部分包,而不是整个项目的包。这样能减少启动时的扫描开销,提高性能。

补充
使用 ${} 来注入配置属性值,如下:

@SpringBootApplication(scanBasePackages = {"${demo.info.base-package}.server", "${demo.info.base-package}.module"})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

.yaml文件如下:

demo:info:base-package: com.demo

注:自定义starter使用@AutoConfiguration注解,无需将其路径放入扫描路径中。

相关文章:

  • homebrew安装配置Python(MAC版)
  • “wsl --install -d Ubuntu-22.04”下载慢,中国地区离线安装 Ubuntu 22.04 WSL方法(亲测2025年5月6日)
  • 网络安全等级保护有关工作事项[2025]
  • 网工实验——静态路由与BFD联动
  • 如何将本地 Jar 包安装到 Maven 仓库(以 Aspose 为例)
  • vue3 computed方法使用详细讲解
  • MUSIQ ,MANIQA,CLIP-IQA,FID是什么指标,分别是如何计算的(图像恢复领域评价指标
  • sqli-labs靶场通关保姆级教学(Get传输篇)Less-1Less-10
  • Python 10天冲刺 《元编程(Meta-programming)》
  • 《Python星球日记》第33天:前后端分离与 RESTful API
  • RPM打包格式spec文件设计原理与关键特性说明
  • 2. H264编码
  • 跨境电商合规新时代:亚马逊AHR风控系统深度解析与应对指南
  • 视觉爬虫开发:通过Puppeteer截图+CV定位动态元素坐标
  • 【iOS】源码阅读(二)——NSObject的alloc源码
  • ECMAScript 6(ES6):JavaScript 现代化的革命性升级
  • 1、Kafka与消息队列核心原理详解
  • 【技术追踪】通过潜在扩散和先验知识增强时空疾病进展模型(MICCAI-2024)
  • 如何分析java对象占用内存大小
  • 力扣118,1920题解
  • 汪海涛评《线索与痕迹》丨就虚而近实
  • 印巴冲突升级,巴防长称已击落5架印度战机
  • 李学明谈笔墨返乡:既耕春圃,念兹乡土
  • 解放军仪仗司礼大队仪仗分队参加纪念苏联伟大卫国战争胜利80周年阅兵活动
  • 中海油高管调整:刘永杰、刘小刚任副总裁
  • 社区来电催生?多地回应:系为居民提供卫生健康服务