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

spring boot的包扫描范围

目录标题

    • 一、误解
    • 二、正确的理解
    • 三、不同包也能扫描到Bean的方法

一、误解

一开始我一直以为spring boot默认的包扫描范围是启动类的同级目录和子目录下的Bean。其实正真是与启动类在同个包以及子包下的Bean
我一直误解了包的概念,包并不是只文件夹(文件路径)。
在这里插入图片描述
只扫描这个文件夹下的所有类。
在这里插入图片描述

上面的理解是完全错误的,也就是你误解了java中包的概念,包不等于文件夹。。。

二、正确的理解

在同一个项目中,一般会有很多模块。如下:
在这里插入图片描述

mian模块中有spring boot的启动类。如果想要让main模块扫描到并使用commom模块中的Bean应该做?

我们已经知道spring boot的默认包扫描规则是:启动类在同个包以及子包下的Bean。因此我们只需要将main模块的包命名,用在commom模块中,并保持在同包或子包下即可。如下:

在main和commom两个模块中,main 的包名为:com.lihua ,commom 的包名为:com.lihua.test。符合同包或者子包的规则。因此commom下的bean能直接被扫描到。
在这里插入图片描述

例子:

启动类所在包其他模块的Bean所在包能否扫描到Bean
com.lihuacom.lihua.test
com.lihuacom.lihua1.test不能

三、不同包也能扫描到Bean的方法

  1. 在启动类添加包扫描。@ComponentScan(value = {"com.lihua1.**","com.lihua.**"}) 注意:手动配置后,默认的就失效了,所以要加上原来的包路径(本包路径)。
  2. 通过配置META-INF/spring.factories文件。spring boot2.7以前
  3. 通过配置/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件 。spring boot2.7以后

一般来说,包路径等于项目、公司的域名的逆写。比如项目域名:lihua.com ,包路径就为:com.lihua 。因此导入的三方maven依赖(spring boot 提供的starter,自己的starter,三方的starter)时,starter中的Bean如何扫描呢?总不能一个个在@ComponentScan注解加上吧。因此spring boot 通过使用上面 2,3的方式实现包扫描。

http://www.lryc.cn/news/17640.html

相关文章:

  • 常青科技冲刺A股上市:研发费用率较低,关联方曾拆出资金达1亿元
  • 【Linux】工具(1)——yum
  • MySQL - 排序与分页
  • 自动化测试框架对比
  • 第7章 Memcached replace 命令教程
  • 我记不住的那些maven内容
  • 【Java】Spring更简单的读取和存储
  • Kafka 命令行操作
  • KUKA机器人_基础编程中的变量和协定
  • 代码名命规范浅析
  • 数据结构第15周 :( 求第k大的数 + 查找3个数组的最小共同元素 + 查找一个循环顺序数组的最小元素 + Crazy Search)
  • 【数据结构】Map 和 Set
  • IPVlan 详解
  • 直播间的2个小感悟
  • STM32开发(15)----芯片内部温度传感器
  • Apache Hadoop生态部署-zookeeper分布式安装
  • MySQL(九)
  • Matlab 计算一条直线与一条线段的交点
  • Read book Netty in action(Chapter VI)--ByteBuf
  • VsCode开发工具的入门及基本使用
  • python标准库——OS模块接口详解
  • LeetCode 622.设计循环队列
  • OraDump导出套件
  • CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析
  • Firebase常用功能和官方Demo简介
  • MATLAB R2020a 与PreScan8.5.0 详细安装教程(图文版)
  • CNI 网络流量 4.3 Calico felix
  • 超声波风速风向传感器的通讯协议
  • JVM笔记(8)—— 直接内存
  • Unity性能优化:如何优化Drawcall