@ComponentScan 是一个注解,用于Spring框架,它允许开发者指定Spring应该扫描哪个包或包下的子包来寻找组件(如@Component@Service@Repository等注解标注的类)。通过使用 @ComponentScan,开发者可以自动化地注册这些组件,使得它们能够被Spring容器管理。

语法

@ComponentScan 注解的基本语法如下:

@ComponentScan(basePackages = "com.example", useDefaultFilters = false, includeFilters = {@Filter(type = FilterType.ANNOTATION, classes = {MyAnnotation.class})}, excludeFilters = {@Filter(type = FilterType.ANNOTATION, classes = {MyAnnotation.class})})

属性

  • basePackages:用于指定Spring应该扫描的包。这个属性可以接受一个字符串数组,也可以接受一个点号分隔的包路径。
  • useDefaultFilters:如果设置为true,则使用默认的过滤器,即扫描所有带有@Component@Service@Repository@Controller注解的类。如果设置为false,则不会使用默认的过滤器。
  • includeFilters:用于指定Spring应该包含哪些类型的类。这个属性可以接受一个过滤器数组,每个过滤器都包含一个类型和一个类。例如,@Filter(type = FilterType.ANNOTATION, classes = {MyAnnotation.class}) 表示只扫描带有MyAnnotation注解的类。
  • excludeFilters:用于指定Spring不应该包含哪些类型的类。这个属性和includeFilters类似,也可以接受一个过滤器数组。

示例

以下是一个使用 @ComponentScan 的示例:

@SpringBootApplication
@ComponentScan(basePackages = "com.example", useDefaultFilters = false, includeFilters = {@Filter(type = FilterType.ANNOTATION, classes = {MyAnnotation.class})}, excludeFilters = {@Filter(type = FilterType.ANNOTATION, classes = {MyAnnotation.class})})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}

在这个示例中,Spring将扫描com.example包及其子包,只包含带有MyAnnotation注解的类,并排除带有MyAnnotation注解的类。

应用场景

  • 自动化组件注册:通过 @ComponentScan,Spring可以自动扫描并注册带有特定注解的类,从而简化了组件注册的过程。
  • 微服务架构:在微服务架构中,每个服务可能会有多个模块,每个模块都有自己的一套组件。使用 @ComponentScan 可以方便地在每个模块中定义自己的扫描路径,从而实现模块化开发。

注意事项

  • @ComponentScan 注解通常用于Spring Boot应用的主类上,这样Spring Boot会自动扫描该类所在的包及其子包。
  • 如果需要对特定的模块或包进行扫描,可以将 @ComponentScan 注解放在该模块或包的入口类上。
  • 如果需要排除某些包或类,可以通过设置excludeFilters属性来实现。

    总之,@ComponentScan 是Spring框架中的一个重要注解,它允许开发者自动化地注册带有特定注解的类,从而简化组件注册的过程。通过合理地使用这个注解,可以实现模块化开发和微服务架构。

@ComponentScan的更多相关文章

  1. spring源码分析之<context:component-scan/>vs<annotation-config/>

    1.<context:annotation-config/> xsd中说明: <xsd:element name="annotation-config"> ...

  2. context:component-scan" 的前缀 "context" 未绑定。

    SpElUtilTest.testSpELLiteralExpressiontestSpELLiteralExpression(cn.zr.spring.spel.SpElUtilTest)org.s ...

  3. 为什么applicationContext.xml和spring-servlet.xml中都有注解过滤<context:component-scan base-package="myproject"> 和<context:component-scan base-package="myproject.controller" />

    在刚学习SpringMVC框架整合时,你也许会产生疑问为什么Spring.xml和SpringMVC.xml中都有注解过滤. <context:component-scan base-packa ...

  4. context:component-scan标签的use-default-filters属性的作用以及原理分析

    一.背景 我们在Spring+SpringMVC+Mybatis的集成开发中,经常会遇到事务配置不起作用等问题,那么本文就来分析下出现这种问题可能的原因以及解决方式. 二.分析及原理窥探 1.项目结构 ...

  5. spring <context:component-scan>使用说明(转)

    在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类 ...

  6. [转载]Difference between <context:annotation-config> vs <context:component-scan>

    在国外看到详细的说明一篇,非常浅显透彻.转给国内的筒子们:-) 原文标题: Spring中的<context:annotation-config>与<context:componen ...

  7. <context:component-scan>使用说明

    Spring组件扫描<context:component-scan/>使用详解 在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫 ...

  8. 关于context:component-scan配置中use-default-filters参数的作用

    参考了多篇文章都说明了use-default-filters参数的基本用途,但有些主要点没有说到,这里补充记录下: <context:component-scan base-package=&q ...

  9. annotation-config vs component-scan – Spring Core--转

    原文地址:http://techidiocy.com/annotation-config-vs-component-scan-spring-core/ <context:annotation-c ...

  10. context:component-scan扫描使用的use-default-filters

    如下方式可以成功扫描到@Controller注解的Bean,不会扫描@Service/@Repository的Bean. <context:component-scan base-package ...

随机推荐

  1. NumPy 差分、最小公倍数、最大公约数、三角函数详解

    NumPy 差分 离散差分意味着相邻元素之间的减法. 例如,对于 [1, 2, 3, 4],离散差分将是 [2-1, 3-2, 4-3] = [1, 1, 1] 要找到离散差分,使用 diff() 函 ...

  2. MinIO 图片转文件的分界线RELEASE.2022-05-26T05-48-41Z

    前言:本人想用MinIO存储文件,但是不想最新版本Mete文件,于是各种寻找于是终于找到办法了,原来是官方版本更新导致的.需要我们去寻找相应的版本. 1.官网下载网站 https://dl.min.i ...

  3. WPF Canvas在Image 图像上绘图,自适应缩放.

    效果如图 实现了绘图,自适应缩放 核心代码如下 <Window.InputBindings> <KeyBinding Key="Z" Modifiers=&quo ...

  4. 【HDC 2024】华为云开发者联盟驱动应用创新,赋能开发者成长

    本文分享自华为云社区<[HDC 2025]华为云开发者联盟驱动应用创新,赋能开发者成长>,作者:华为云社区精选. 6月21日到23日,华为开发者大会(HDC 2024)于东莞松山湖举行,这 ...

  5. Python使用Matplotlib画以日期为X轴的图

    Python使用Matplotlib画以日期为X轴的图 步骤: 用pd把字符串格式的日期转成date格式. 使用 AutoDateLocator 设置x轴的属性. 1 from matplotlib ...

  6. .NET Core WebAPI项目部署iis后Swagger 404问题解决

    .NET Core WebAPI项目部署iis后Swagger 404问题解决 前言 之前做了一个WebAPI的项目,我在文章中写到的是Docker方式部署,然后考虑到很多初学者用的是iis,下面讲解 ...

  7. Linux系统基本介绍

    一.Linux系统基本介绍 [1].Linux操作系统特点 多任务的操作系统 多任务操作系统 严格区分大小写 Linux一切皆文件 所有文件的起点都是"/"根目录 对于Linux操 ...

  8. GUI测试

    标签(空格分隔): GUI 我要用到 Chrome 浏览器,所以需要先下载 Chrome Driver 并将其放入环境变量.接下来,你可以用自己熟悉的方式建立一个空的 Maven 项目,然后在 POM ...

  9. 做一个单纯的react-image显示组件

    最近项目上有一个需求,在显示图片的时候,需要传递自定义的头部就行认证.google了一番之后,发现没有现成的组件库可以使用[也可能是我没找到],所以请求图片只能采用xhr方式来异步加载.下面就是在做这 ...

  10. Mac mysql 5.7.x 设置服务开机自启动

    在终端输入 sudo vi /Library/LaunchDaemons/com.mysql.mysql.plist 输入以下内容 <?xml version="1.0" e ...