【SpringBoot】一文讲懂什么是scanBasePackages

ops/2025/3/6 16:45:17/

文章目录

  • 一、作用
    • 流程说明
  • 二、使用场景
  • 三、配置方式
  • 四、默认行为
  • 五、注意事项
  • 六、示例
    • 1. 单模块项目
    • 2. 多模块项目
  • 七、与@ComponentScan的关系
  • 八、总结

scanBasePackages是SpringBoot中用于指定主件扫描(Component Scanning)的包路径的配置属性。它通常用于@SpringBootApplication注解中,用于控制SpringBoot应用程序启动时扫描哪些包中的组件(如@Component@Service@Respository@Controller等)。

一、作用

  • 指定扫描范围:默认情况下,SpringBoot 会扫描主应用程序类所在包及其子包中的所有组件。通过 scanBasePackages,可以自定义扫描的包路径。
  • 优化启动性能:减少不必要的包扫描,加快应用程序启动速度。
  • 模块化支持:在多模块项目中,指定需要扫描的模块包。
    在这里插入图片描述

流程说明

1.Spring Boot 启动

  • 应用程序启动时,Spring Boot 开始初始化 Spring 上下文。

2.检查是否指定 scanBasePackages

  • 如果指定了 scanBasePackages,Spring Boot 会扫描指定的包及其子包。
  • 如果未指定 scanBasePackages,Spring Boot 会扫描主类所在包及其子包。

3.扫描并注册组件

  • Spring Boot 会扫描包中的组件(如 @Component@Service@Repository@Controller 等)。
  • 将所有符合条件的组件注册到 Spring 上下文中。

4.完成 Spring 上下文初始化

  • 扫描完成后,Spring 上下文初始化完成,应用程序可以正常运行。

二、使用场景

  • 1.多模块项目
    主模块需要扫描其他模块的组件。
  • 2.自定义包结构
    项目包结构与默认扫描路径不一致。
  • 3.性能优化
    避免扫描不必要的包。

三、配置方式

1. 在 @SpringBootApplication 中配置

java">@SpringBootApplication(scanBasePackages = {"com.example.core", "com.example.web"})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

2.使用 @ComponentScan 注解

java">@SpringBootApplication
@ComponentScan(basePackages = {"com.example.core", "com.example.web"})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

四、默认行为

  • 如果不指定 scanBasePackages,Spring Boot 会扫描主应用程序类所在包及其子包。
  • 例如,主类在 com.example 包下,则默认扫描 com.example 及其子包。

五、注意事项

  1. 扫描范围
    如果指定了 scanBasePackages,Spring Boot 只会扫描指定的包,而不会扫描默认包。
  2. 性能影响
    扫描范围过大可能会影响启动性能,建议根据实际需求配置。
  3. 多模块项目
    确保所有需要扫描的模块包都已包含在 scanBasePackages 中。

六、示例

1. 单模块项目

java">@SpringBootApplication(scanBasePackages = "com.example")
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

2. 多模块项目

java">@SpringBootApplication(scanBasePackages = {"com.example.core", "com.example.web"})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

七、与@ComponentScan的关系

  • scanBasePackages@SpringBootApplication 的一个属性,用于简化配置。
  • @ComponentScan 是 Spring 框架的原生注解,功能更强大,支持更复杂的扫描规则。
  • 如果同时使用 scanBasePackages@ComponentScan@ComponentScan 的配置会覆盖 scanBasePackages

八、总结

特性说明
默认行为扫描主类所在包及其子包
自定义扫描范围通过 scanBasePackages@ComponentScan 指定
性能优化减少不必要的包扫描,提升启动速度
多模块支持指定需要扫描的模块包

通过合理配置 scanBasePackages,可以更好地控制 Spring Boot 应用程序的组件扫描行为,满足复杂项目的需求。


http://www.ppmy.cn/ops/163644.html

相关文章

ubuntu20.04 安装离线版docker-20.10.0

1. 安装步骤 步骤一:官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.0.tgz步骤二:解压安装包; tar -zxvf docker-20.10.0.tgz 步骤三:将解压之后的docker文件移到 /usr/bin目录下; c…

微信小程序接入DeepSeek模型(火山方舟),并在视图中流式输出

引言: DeepSeek,作为一款先进的自然语言处理模型,以其强大的文本理解和生成能力著称。它能够处理复杂的文本信息,进行深度推理,并快速给出准确的回应。DeepSeek模型支持流式处理,这意味着它可以边计算边输…

Github 2025-03-05 C开源项目日报 Top10

根据Github Trendings的统计,今日(2025-03-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10C++项目1Python项目1Tcl项目1Redis - 内存数据库和数据结构服务器 创建周期:5411 天开发语言:C协议类型:BSD 3-Clause “New” or “…

std::sort 排序算法本质

使用了内省排序(Introsort) 现代标准库实现中,std::sort 通常使用 内省排序(Introsort),它是一种混合排序算法,结合了以下三种算法的优点: 快速排序 作为主要算法,平均…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例4: 自定义插槽

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例4📚前言📚页面效果📚指令输入定义属性…

DeepSeek、Grok与ChatGPT:AI三巨头的技术博弈与场景革命

## 引言:AI工具的三国杀时代 2025年的AI江湖,DeepSeek以黑马之姿横扫全球应用榜单,Grok 3凭借马斯克的狂言抢占头条,ChatGPT则稳坐行业王座。这场技术竞赛不仅是参数量的比拼,更是一场关于效率、成本与场景适配的终极…

Ubuntu录屏--OBS

使用场景 手机拍摄到的画面显示在电脑上,同时需要记录软件实时采集到的数据。如果各拍各的后期还需要对时间线,比较麻烦。因此在解决了手机拍摄画面上传电脑后,直接录屏即可。 安装OBS具体步骤 直接参考OBS官网 下载 | OBS 需要使用的命令…

云原生时代的技术桥梁

在数字化转型的大潮中,企业面临着数据孤岛、应用间集成复杂、高成本与低效率等问题。这些问题不仅阻碍了企业内部信息的流通和资源的共享,也影响了企业对外部市场变化的响应速度。当前,这一转型过程从IT角度来看,已然迈入云原生时…