SpringBoot主启动类使用@ComponentScans、@ComponentScan扫描组件类,注意避坑

news2025/2/21 19:57:38

前言:
1、大家都知道,Springboot主启动加载会默认扫描同级包目录下所有的组件类、配置类,然后进行解析注入到Spring容器中。@SpringBootApplication 是个联合注解,里面包含了 @ComponentScan 组件扫描注解,所以我们不需要单独在主启动类上标注 @ComponentScan

2、如果我们需要扫描主启动类同级以外的包目录怎么?下面看下 @ComponentScans和@ComponentScan 的使用

3、验证用的项目结构为:

 

一、使用 @ComponentScans 指明需要扫描的包目录

1、示例代码:

@ComponentScans(value = {@ComponentScan(basePackages = {"test.componentscans.configure", "test.componentscans.dto"})})

说明:
【1】@ComponentScans 的属性值 value 为 @ComponentScan 类型的数组
【2】@ComponentScan 的 value 或 basePackages 为具体要扫描的包目录
【3】basePackages 的值支持包全路径、也支持通配符,例如:com.xxx.*
【4】在主启动单独使用 @ComponentScans 的时候,不需要指明主启动类同级包目录,不会影响默认扫描主启动类同级包目录

二、使用 @ComponentScan 指明需要扫描的包目录

1、示例代码:

@ComponentScan(basePackages = {"com.hkl.*", "test.componentscans.configure", "test.componentscans.dto"})

说明:
【1】@ComponentScan 的 value 或 basePackages 为具体要扫描的包目录
【2】basePackages 的值支持包全路径、也支持通配符,例如:com.xxx.*

注意:
【1】因为 @SpringBootApplication 中已经包含 @ComponentScan 注解、并且用以扫描主启动类同级目录下的组件配置类,所以我们在主启动类上再使用 @ComponentScan 注解,会覆盖掉 @SpringBootApplication 中的 @ComponentScan,从而导致不会默认扫描主启动类同级包目录
【2】因此在使用 @ComponentScan 注解的时候,需要把各个包目录都指明,包括主启动类的同级包目录

三、总结:

1、@SpringBootApplication 是联合注解,包含了 @ComponentScan 会默认扫描主启动类同级包目录下所有的组件类、配置类

2、在主启动类单独使用 @ComponentScan 注解的时候,需要把各个包目录都指明,包括主启动类的同级包目录(否则无法默认扫描主启动类同级包目录)

3、在主启动单独使用 @ComponentScans 的时候,只需指明主启动同级包以外的包目录就可以,不需要指明主启动类同级包目录,不会影响默认扫描主启动类同级包目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

沉睡者IT - 什么是NFT?

欢迎关注沉睡者IT,点上面关注我 ↑ ↑ NFT,全称为Non-Fungible Token,指非同质化通证,实质是区块链网络里具有唯一性特点的可信数字权益凭证,是一种可在区块链上记录和处理多维、复杂属性的数据对象。 以上是百度百科…

MongoBd 离线安装与管理

背景: 鉴于内部网络原因,可能一个简单的操作变得复杂化,现在就Mongodb的离线安装分享本人的操作经验: 材料: 操作系统:centos7.6 MongoDB(主程序) : mongodb-linux-x86_64-rhel70-6.0.1.tgz 下载地址:下载…

传输层协议 —— UDP

目录 一、端口号的划分范围 二、认识知名端口号 三、两个问题 四、nestat和pidof命令 五、UDP协议 1. UDP首部格式 2. UDP的特点 3. 面向数据报 4. UDP的缓冲区 5. UDP使用注意事项 6. 基于UDP的应用层协议 一、端口号的划分范围 端口号的长度是16位,因此…

博途PLC和MATLAB矩阵运算存储方法对比

MATLBA不用多说,号称矩阵实验室可想而知在MATLAB里对矩阵的存储、运算非常简单、高效。如下图简单定义一个5*3的矩阵 1、rand(5*3) 上面利用rand()函数简单的实现了内存矩阵存储空间分配+附随机初值,下面我们看下博途里的矩阵定义存储方法。 BP神经网络PID算法的PLC实现过程…

量表如何分析?

一、什么是量表 量表是一种测量工具,通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量,最常见到的就是李克特量表。 ‍1、定义:李克特量表 李克特量表是最常用的量表,是由美国社会心…

基于AD Event日志检测LSASS凭证窃取攻击

01、简介 简单介绍一下,LSASS(本地安全机构子系统服务)在本地或域中登录Windows时,用户生成的各种凭证将会存储在LSASS进程的内存中,以便用户不必每次访问系统时重新登录。 攻击者在获得起始攻击点后,需要获取目标主机上的相关凭证…

AutoCAD Electrical 2022—项目特性

当绘图的过程中如果弹出上面的对话框,就是库和图标菜单途径不对造成的; 点击浏览找到正确的位置或点击默认设置恢复默认的路径; 元件对应原理图的设置; 标记格式:放置元件的代号的格式; 线号:编…

iphone怎么传数据到另一个手机,苹果如何转移数据到新手机,两台iphone怎么同步所有数据

换新手机后,需要迁移旧苹果手机的数据到新苹果手机里面,那么,iphone怎么传数据到另一个手机?本篇文章带您深度了解苹果手机的数据传输技巧。 方法一、通过“快速开始”传输数据 苹果手机如何数据传输?我记得之前换 iP…

【JUC】信号量Semaphore详解

前言 大家应该都用过synchronized 关键字加锁,用来保证某个时刻只允许一个线程运行。那么如果控制某个时刻允许指定数量的线程执行,有什么好的办法呢? 答案就是JUC提供的信号量Semaphore。 介绍和使用 Semaphore(信号量)可以用…

Servlet API 表白墙

Servlet API 详解 主要三个: 1.HttpServlet 2.HttpServletRequest 3.HttpServletResponse 1.HttpServlet 方法名称 调用时机 init 在 HttpServlet 实例化之后被调用一次 destroy 在 HttpServlet 实例不再使用的时候调用一次 service 收到 HTTP 请求的时候调用 …

vue开发测评系统思路及踩坑

最近公司做了一个测评系统,因为时间很短,本以为会很简单,没有想到踩了很多坑。 先看下部分效果图吧 然后在说下需求 1:所有的答案都是动态的(例如选择是出来的是第二题,选择否出来的是第五题&#xff09…

【Linux】文件权限的理解

不用心做一件事情,你永远不知道自己有多么的强大! 文章目录一、shell命令以及运行原理(centos7下,shell为命令行解释器bash)1. 什么是shell(Kernel外层的软件层)?2. shell的交互方式存在意义3. windows GUI对比Linux shell(都是Ke…

算法: C# 中将 Dictionary 集合用作 Hashmap 等价类型

一.只出现一次的数字 1.1 题目描述 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1: 输入:nums [2,2,3,2] 输出:3 示例 2&#…

Faster RCNN全文翻译

Abstract—State-of-the-art【最先进的】 object detection networks depend on region proposal algorithms to hypothesize【假设、推测】 object locations.Advances like SPPnet [1] and Fast R-CNN [2] have reduced the running time of these detection networks, expos…

赞叹AI的力量-TopazLabs 全家桶使用经历

一、Topaz Gigapixel AI 之前有用过日本的一个2x提升的在线网站服务waifu2x 是通过深度卷积神经网络来实现的,对于anime-style的图片效果是非常好的,使用过之后发现对于一些真实图片效果也不错,只是放大之后能明显的看到局部失真。 效果图&…

详解nginx的root与alias

文章目录1. 结论2. 详解root2.1 基本用法2.2 location的最左匹配原则2.3 index2.4 nginx location解析url工作流程2.5 末尾/3. 详解alias3.1 基本用法4. 特殊情况4.1 alias指定文件4.2 root指定文件nginx版本: 1.18.0 1. 结论 location命中后 如果是root,会把请求…

Anaconda、Conda、pip、Virtualenv的区别

一、Anaconda 1.1 简介 Anaconda是一个包含180的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。 二、Conda 2.1 简述 conda是包及其依赖项和环境的管理工具。 适用语言:Python, R, Ruby, Lua, Scala, …

什么是CRM系统,它如何支持客户营销管理?

简道云回款&销售排名看板什么是CRM控制系统,它怎样全力支持顾客网络营销管理工作? 顾客关系管理工作(CRM)是国际品牌用以培育与顾客关系的技术。这些应用软件系统意在协助产品销售和服务全权更有效地与顾客沟通交流。由于91%的雇员超过11人的企业使用CRM&…

Vue3 —— 利用vite+vue创建一个vue3项目

前言 本文主要讲解如何利用vitevue创建第一个项目以及vue3的基础知识点 一、创建一个vue3项目 这里我们主要介绍如何利用 vitevue3创建项目 1.有关vite Vite(法语意为 "快速的",发音 /vit/,发音同 "veet")是…

AWS Lambda函数实战

AWS Lambda函数实战 实战效果&#xff1a;开发一个函数&#xff0c;它会关注事件中的某个名字&#xff0c;并返回“Hello<名字>&#xff01;”。如果输入事件没有提供名字&#xff0c;则函数返回一个更加通用的问候语“Hello World&#xff01;”。 AWS Lambda函数实战A…