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

Spring Boot中的扫描注解如何使用

在 Spring Boot 中,扫描注解是指通过注解来告诉 Spring 框架应该扫描哪些包、哪些类或哪些特定的组件,并将其作为 Spring 容器中的 bean 进行管理。Spring Boot 主要通过以下几种注解来实现自动扫描:

  • @ComponentScan
  • @SpringBootApplication
  • @Component
  • @Service
  • @Repository
  • @Controller

这些注解的作用是告诉 Spring 容器扫描哪些类,并将它们注册为 Spring Bean。

1. @SpringBootApplication 注解

@SpringBootApplication 是一个组合注解,它包含了三个重要的注解:

  • @Configuration:指示该类是一个 Spring 配置类,相当于 applicationContext.xml@Configuration
  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制。
  • @ComponentScan:启动类上通常会自动应用 @ComponentScan 注解,指定 Spring Boot 扫描包的位置。

通常,你只需要使用 @SpringBootApplication 注解即可,它会自动启用组件扫描。

案例:@SpringBootApplication 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

在这个示例中,@SpringBootApplication 会自动启用从 MyApplication 类所在包及其子包的组件扫描。

2. @ComponentScan 注解

@ComponentScan 注解是 Spring 的基础注解,用于指定 Spring 容器扫描的包。如果你不使用 @SpringBootApplication,可以直接使用 @ComponentScan 来手动指定扫描的包。

案例:手动配置 @ComponentScan 注解
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan(basePackages = "com.hk.services")  // 指定扫描 com.hk.services 包
public class AppConfig {
}

在这个案例中,Spring 容器将只扫描 com.hk.services 包中的所有组件。

3. @Component@Service@Repository@Controller 注解

这些注解标记的是 Spring Bean 的不同类型。@Component 是一个通用的注解,而 @Service@Repository@Controller 是它的特化版本,分别用于标注服务层、数据访问层和控制器层的组件。

  • @Component:标记一个通用的 Spring Bean。
  • @Service:用于标记服务层的 Bean。
  • @Repository:用于标记数据访问层的 Bean。
  • @Controller:用于标记 Web 层(Spring MVC 控制器)的 Bean。

当类上标注了这些注解后,Spring 会自动将它们注册为容器中的 Bean,并进行依赖注入。

案例:使用 @Component 和其他特化注解
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Controller;@Component
public class MyComponent {public void doSomething() {System.out.println("doSomething!");}
}@Service
public class MyService {public void performService() {System.out.println("performService...");}
}@Repository
public class MyRepository {public void saveData() {System.out.println("Saving data...");}
}@Controller
public class MyController {public void handleRequest() {System.out.println(" request...");}
}

在这个例子中,MyComponentMyServiceMyRepositoryMyController 都会被 Spring 容器自动扫描并注册为 Bean。

4. Spring Boot 自动配置扫描

在 Spring Boot 中,许多功能(如数据库连接、Web 配置等)是通过 自动配置 来实现的。Spring Boot 会根据类路径中的依赖自动配置相关的功能。这种自动配置的扫描也是通过 @ComponentScan@EnableAutoConfiguration 完成的。

例如,如果你的项目中包含了 spring-boot-starter-web 依赖,Spring Boot 会自动启用相关的 Web 配置(如嵌入式 Tomcat 的配置)并扫描 @Controller 注解的类。

5. 组件扫描的范围

默认情况下,Spring Boot 会从主应用程序类(通常是标有 @SpringBootApplication 注解的类)所在的包及其子包开始扫描。如果你需要改变扫描的范围,可以通过 @ComponentScan 来指定其他的包。

示例:自定义扫描包的范围
import org.springframework.context.annotation.ComponentScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@ComponentScan(basePackages = "com.hk.custom")  // 自定义扫描包
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

在这个例子中,Spring 会扫描 com.hk.custom 包及其子包中的所有 @Component@Service@Repository@Controller 等注解的类。

总结

  • @SpringBootApplication:启用自动配置、配置类和组件扫描。
  • @ComponentScan:自定义扫描的包或类。
  • @Component@Service@Repository@Controller:不同类型的 Spring Bean 注解。
  • 自动配置:Spring Boot 自动扫描类路径中的依赖并自动配置相关组件。

这些注解通过扫描和自动装配帮助开发者轻松管理 Spring 容器中的 Bean,而不需要手动注册每个 Bean,使得开发过程更加简洁和高效。

相关文章:

Spring Boot中的扫描注解如何使用

在 Spring Boot 中,扫描注解是指通过注解来告诉 Spring 框架应该扫描哪些包、哪些类或哪些特定的组件,并将其作为 Spring 容器中的 bean 进行管理。Spring Boot 主要通过以下几种注解来实现自动扫描: ComponentScanSpringBootApplicationCom…...

初识JVM HotSopt 的发展历程

目录 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 各大 JVM look 看一下虚拟机 HotSopt 的发展历程 总结 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 即时编译 主要是…...

基于springboot果蔬供应链信息管理平台

基于Spring Boot的果蔬供应链信息管理平台是一种集成了先进信息技术和果蔬供应链管理理念的综合性系统。 一、背景与意义 随着人们生活水平的提高和对健康饮食的重视,果蔬市场需求不断增长。然而,果蔬供应链涉及多个环节,包括种植、采摘、加…...

掌握 React 关键:理解 super () 和 super (props) 的不同应用

在 React 中,super() 和 super(props) 都与 React 类组件的构造函数(constructor)以及继承有关。为了理解它们之间的区别,我们需要了解 JavaScript 类继承机制以及 React 类组件的工作原理。 1. super() 与 super(props) 的区别 …...

Scala语言的软件开发工具

Scala语言的软件开发工具概述 Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。随着大数据技术的发展和互联网应用的广泛普及,Scala逐渐成为了开发高性能应用和后端服务的热门选择。为了更好地进行Scala开发,开发者需要…...

斯坦福大学李飞飞教授团队ARCap: 利用增强现实反馈收集高质量的人类示教以用于机器人学习

近年来,通过人类示范进行模仿学习在教授机器人操控技能方面取得了令人瞩目的进展。为了进一步扩大训练数据集的规模,近期的研究开始采用便携式数据采集设备,无需依赖物理机器人硬件。然而,由于在数据采集过程中缺乏机器人实时反馈…...

【Linux】从零开始:编写你的第一个Linux进度条小程序

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具 文章目录 一、知识铺垫1.1 回车与换行概念1.2 缓冲区 二、实现简单倒计时三、进度条3.1 Verrs…...

web前端第八次作业---制作音乐榜单

制作音乐榜单 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…...

心脏扩散张量成像中的异常值检测:射击拒绝还是稳健拟合?|文献速递-视觉大模型医疗图像应用

Title 题目 Outlier detection in cardiac diffusion tensor imaging: Shot rejection or robust fitting? 心脏扩散张量成像中的异常值检测&#xff1a;射击拒绝还是稳健拟合&#xff1f; 01 文献速递介绍 心脏扩散张量成像&#xff08;Cardiac Diffusion Tensor Imagin…...

Linux Kernel 之十 详解 PREEMPT_RT、Xenomai 的架构、源码、构建及使用

概述 现在的 RTOS 基本可以分为 Linux 阵营和非 Linux 阵营这两大阵营。非 Linux 阵营的各大 RTOS 都是独立发展,使用上也相对独立;而 Linux 阵营则有多种不同的实现方法来改造 Linux 以实现实时性要求。本文我们重点关注 Linux 阵营的实时内核实现方法! 本文我们重点关注 …...

RabbitMQ-消息消费确认

我们一般使用的是消费者作为被动方接收 RabbitMQ 推送消息&#xff0c;另一种是消费者作为主动方可以主动拉取消息。 RabbitMq 服务器推送消息分为隐式(自动)确认和显示确认。 1 消费者拉取消息 消费者作为主动方拉取消息&#xff0c;每次只能获取一条。 using (var channel c…...

E10.【C语言】练习:编写一个猜数字游戏

目录 1.规则 2.准备 3.游戏代码 1.规则 1.程序生成1-100间的随机数 2.用户猜数字 猜对了&#xff1a;游戏结束 猜错了&#xff1a;程序会告知猜大了或猜小了&#xff0c;继续进行游戏&#xff0c;直到猜对 3.游戏可以一直玩除非退出游戏 2.准备 1.框架&#xff1a;循…...

RK3568-rk809rtc休眠唤醒

参考链接 https://www.360doc.cn/article/71858349_1119199262.html修改驱动drivers/mfd/rk808.c static void rk817_shutdown_prepare(void) { int ret; …...

【Uniapp-Vue3】pages.json页面路由globalStyle的属性

项目的全局配置在pages.json中。 一、导航栏设置 二、下拉刷新设置 下拉就可以看到设置的样式 三、上拉触底 这个页面中&#xff0c;向下滑动页面到底部就会输出“到底了” 现在将触底距离设置为500 走到半路就会输出“到底了”...

NHANES数据挖掘|特征变量对死亡率预测的研究设计与分析

书接上回&#xff0c;应各位临床或在科室的小伙伴们需求&#xff0c;除了多组学和算法开发外&#xff0c;插播关于临床护理方向的数据挖掘&#xff0c;今天分享两篇NHANES的分析文献。 1、时依中介分析 DOI&#xff1a; 10.1186/s12933-024-02191-5 整体思路 基于 NHANES 数据…...

【Sharding-JDBC学习】概述_shardingsphere-jdbc 和sharding-jdbc

1.概述 1.1.分库分表是什么 小明是一家初创电商平台的开发人员&#xff0c;他负责卖家模块的功能开发&#xff0c;其中涉及了店铺、商品的相关业务&#xff0c;设计如下 数据库&#xff1a; 通过以下SQL能够获取到商品相关的店铺信息、地理区域信息&#xff1a; SELECT p.*…...

用户登录/登出功能,当登录页面在另一域名下

需求&#xff1a; 要求为某网址增加用户登录功能。登录页面是现成的&#xff0c;但是位于另一个域名。当request 没带token &#xff0c;要求跳转此登录页面&#xff0c;用户登录后会返回token. 此时再跳回原网址。这个过程如何避免发生跨域问题&#xff1f; 最简单的方案 登…...

自动化解决方案:修复devicedisplaystatusmanager.dll丢失

在Windows操作系统中&#xff0c;DLL&#xff08;动态链接库&#xff09;文件扮演着至关重要的角色。它们为应用程序提供必要的函数和数据&#xff0c;以确保系统的平稳运行。然而&#xff0c;有时我们可能会遇到DLL文件丢失或损坏的问题&#xff0c;比如DeviceDisplayStatusMa…...

.Net8 Avalonia跨平台UI框架——<vlc:VideoView>控件播放海康监控、摄像机视频(Windows / Linux)

一、UI效果 二、新建用户控件&#xff1a;VideoViewControl.axaml 需引用&#xff1a;VideoLAN.LibVLC.Windows包 Linux平台需安装&#xff1a;VLC 和 LibVLC &#xff08;sudo apt-get update、sudo apt-get install vlc libvlccore-dev libvlc-dev&#xff09; .axaml 代码 注…...

网络协议(八):IP 协议

目录 1. IP 协议简介 2. 首部属性 2.1 版本号 2.2 首部长度 2.3 服务类型 2.4 总长度 2.5 > 16位标识 & 3位标志 & 13位片偏移 2.5.1 > 16 位标识 2.5.2 > 3 位标志 2.5.3 > 13 位片偏移 2.6 生存时间(TTL) 2.7 > 8 位协议 2.8 首部校验和…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...