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

news2025/1/21 12:50:52

在 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,使得开发过程更加简洁和高效。

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

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

相关文章

LiveGBS流媒体平台GB/T28181常见问题-没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理?

LiveGBS没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理? 1、none rtp data receive2、搭建GB28181视频直播平台 1、none rtp data receive LiveSMS 收不到下级推流 首先需要排查服务器端 UDP & TCP 30000-30249 端口是否开放其次排…

使用Docker模拟PX4固件的无人机用于辅助地面站开发

前言 最近在制作鸿蒙无人机地面站,模仿的是QGroundControl,协议使用mavlink,记录一下本地模拟mavlink协议通过tcp/udp发送 废话不多说直接上命令 1.启动docker的桌面端 启动之后才能使用docker命令来创建容器 docker run --rm -it jonas…

【Docker】保姆级 docker 容器部署 MySQL 及 Navicat 远程连接

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. docker 容器部署 MySQL1.1 拉取mysql镜像1.2 启动容器1.3 进入容器1.4 使用 root 用户登录 2. Navicat 连…

【大数据】机器学习-----线性模型

一、线性模型基本形式 线性模型旨在通过线性组合输入特征来预测输出。其一般形式为: 其中: x ( x 1 , x 2 , ⋯ , x d ) \mathbf{x}(x_1,x_2,\cdots,x_d) x(x1​,x2​,⋯,xd​) 是输入特征向量,包含 d d d 个特征。 w ( w 1 , w 2 , ⋯ ,…

装备制造行业(复杂机械制造)数字化顶层规划 - 汇报会

行业业务特点: 尊敬的各位管理层: 大家好!今天我将向大家汇报装备制造企业数字化战略的顶层规划设计。在当今数字化浪潮下,装备制造企业面临着转型升级的迫切需求,数字化战略的制定与实施对于提升企业竞争力、实现可持…

深度探索C++20协程机制

#include <iostream> #include <coroutine>class CoroTaskSub { public://编译器在处理协程函数时是通过其返回类型【即协程接口类型】&#xff0c;确定协程的承诺类型和协程句柄类型struct promise_type;using CoroHdl std::coroutine_handle<promise_type>…

linux手动安装mysql5.7

一、下载mysql5.7 1、可以去官方网站下载mysql-5.7.24-linux-glibc2.12-x86_64.tar压缩包&#xff1a; https://downloads.mysql.com/archives/community/ 2、在线下载&#xff0c;使用wget命令&#xff0c;直接从官网下载到linux服务器上 wget https://downloads.mysql.co…

Java Stream实现【Int / Long / Double / Bigdecimal】累计求和

文章目录 背景实现方案案例素材Int类型求和Long 类型求和Double 类型求和BigDecimal 类型求和 背景 在项目开发中经常会使用到数据统计&#xff0c;Java中有求和的方法&#xff0c;可使用Java的Stream工作流实现&#xff0c;记录下来&#xff0c;方便备查。 实现方案 可使用…

OFD文件纯前端查看解决方案

文章目录 ofd.js原有bug修复1、ofd格式文档打开报错2、签章信息不显示 效果展示源码下载 使用前请查看免责声明 ofd.js原有bug修复 1、ofd格式文档打开报错 原因分析&#xff1a; 文档打开时会解析所用到的字体信息&#xff0c;如果字体不在ofd.js预设字体时&#xff0c;会触…

使用 Docker 部署 Java 项目(通俗易懂)

目录 1、下载与配置 Docker 1.1 docker下载&#xff08;这里使用的是Ubuntu&#xff0c;Centos命令可能有不同&#xff09; 1.2 配置 Docker 代理对象 2、打包当前 Java 项目 3、进行编写 DockerFile&#xff0c;并将对应文件传输到 Linux 中 3.1 编写 dockerfile 文件 …

二手车交易系统的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统二手车交易信息管理难度大&#xff0c;容错率低&#xf…

抖音ip属地没有手机卡会显示吗

在数字时代&#xff0c;社交媒体平台如抖音已成为人们日常生活的重要组成部分。随着抖音等应用对用户体验和隐私保护的不断优化&#xff0c;IP属地显示功能逐渐走进大众视野。这一功能旨在提高网络环境的透明度&#xff0c;打击虚假信息和恶意行为。然而&#xff0c;对于没有手…

springMVC---resultful风格

目录 一、创建项目 pom.xml 二、配置文件 1.web.xml 2.spring-mvc.xml 三、图解 四、controller 一、创建项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi…

[Git] 深入理解 Git 的客户端与服务器角色

Git 的一个核心设计理念是 分布式&#xff0c;每个 Git 仓库都可以既是 客户端&#xff0c;也可以是 服务器。为了更好地理解这一特性&#xff0c;我们通过一个实际的 GitHub 远程仓库和本地仓库的场景来详细说明 Git 如何在客户端和服务器之间协作&#xff0c;如何独立地进行版…

网络安全-RSA非对称加密算法、数字签名

数字签名非常普遍&#xff1a; 了解数字签名前先了解一下SHA-1摘要&#xff0c;RSA非对称加密算法。然后再了解数字签名。 SHA-1 SHA-1&#xff08;secure hash Algorithm &#xff09;是一种 数据加密算法。该算法的思想是接收一段明文&#xff0c;然后以一种不可逆的方式将…

了解 ASP.NET Core 中的中间件

在 .NET Core 中&#xff0c;中间件&#xff08;Middleware&#xff09; 是处理 HTTP 请求和响应的核心组件。它们被组织成一个请求处理管道&#xff0c;每个中间件都可以在请求到达最终处理程序之前或之后执行操作。中间件可以用于实现各种功能&#xff0c;如身份验证、路由、…

【三维数域】三维数据调度-负载均衡和资源优化

在处理大规模三维数据时&#xff0c;负载均衡和资源优化是确保系统高效运行、提供流畅用户体验的关键。这两者不仅影响到系统的性能和稳定性&#xff0c;还直接决定了用户交互的质量。以下是关于如何在三维数据调度中实现有效的负载均衡和资源优化的详细探讨。 一、负载均衡 负…

AI大模型开发—1、百度的千帆大模型调用(文心一言的底层模型,ENRIE等系列)、API文档目的地

文章目录 前言一、千帆大模型平台简介二、百度平台官网初使用1、平台注册和使用2、应用注册 并 申请密钥3、开启千帆大模型 API调用a、API文档b、 前言 本章旨在为读者奉献一份实用的操作指南&#xff0c;深入探索如何高效利用百度千帆大模型平台的卓越功能。我们将从账号注册…

Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践

在Java 8及更高版本中&#xff0c;Stream API为集合处理带来了革命性的改变。本文将深入解析如何运用Stream对List进行高效的操作&#xff0c;包括筛选&#xff08;Filter&#xff09;、排序&#xff08;Sort&#xff09;、分组&#xff08;GroupBy&#xff09;、求平均值&…

《视听导报》是什么类型的报纸?报纸上发文章要交版面费吗?

作为个人成果发表的重要场所&#xff0c;报纸目前正得到越来越多单位的认可。不过在投稿时&#xff0c;我们既要考虑投稿的报纸是否符合评审标准&#xff0c;也要考虑发表文章的成本是否在我们的承受范围之内。 下面就让我们以《视听导报》为例&#xff0c;了解下如何查看报纸的…