Spring注解@ComponentScan自定义扫描类

2023-11-12

注:@ComponentScan是用在配置类上的,配置类用@Configuration标记

@Filter定义扫描规则

//FilterType.ANNOTATION:按照注解
//FilterType.ASSIGNABLE_TYPE:按照给定的类型;
//FilterType.ASPECTJ:使用ASPECTJ表达式(几乎不用)
//FilterType.REGEX:使用正则指定(几乎不用)
//FilterType.CUSTOM:使用自定义规则

//@ComponentScan  value:指定要扫描的包
//excludeFilters = Filter[] :指定扫描的时候按照什么规则排除那些组件
//includeFilters = Filter[] :指定扫描的时候只需要包含哪些组件

一、按注解扫描

1、不扫描哪些包:

2、扫描自定义的包:

二、按给定的类型扫描

//配置类==配置文件
@Configuration  //告诉Spring这是一个配置类

@ComponentScans(
		value = {
				@ComponentScan(value="com.atguigu",includeFilters = {

					@Filter(type=FilterType.ASSIGNABLE_TYPE,classes{BookService.class})
				},useDefaultFilters = false)	
		}
		)

//FilterType.ASSIGNABLE_TYPE:按照给定的类型;

public class MainConfig {
	
	//给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id
	@Bean("person")
	public Person person01(){
		return new Person("lisi", 20);
	}

}

 三、自定义TypeFilter指定过滤规则扫描

自定义TypeFilter:

public class MyTypeFilter implements TypeFilter {

	/**
	 * metadataReader:读取到的当前正在扫描的类的信息
	 * metadataReaderFactory:可以获取到其他任何类信息的
	 */
	@Override
	public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
			throws IOException {
		// TODO Auto-generated method stub
		//获取当前类注解的信息
		AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
		//获取当前正在扫描的类的类信息
		ClassMetadata classMetadata = metadataReader.getClassMetadata();
		//获取当前类资源(类的路径)
		Resource resource = metadataReader.getResource();
		
		String className = classMetadata.getClassName();
		System.out.println("--->"+className);
		if(className.contains("er")){
			return true;
		}
		return false;
	}

}

使用自定义规则:

//配置类==配置文件
@Configuration  //告诉Spring这是一个配置类

@ComponentScans(
		value = {
				@ComponentScan(value="com.atguigu",includeFilters = {

						@Filter(type=FilterType.CUSTOM,classes={MyTypeFilter.class})
				},useDefaultFilters = false)	
		}
		)
//FilterType.CUSTOM:使用自定义规则
public class MainConfig {
	
	//给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id
	@Bean("person")
	public Person person01(){
		return new Person("lisi", 20);
	}

}

测试:

	@SuppressWarnings("resource")
	@Test
	public void test01(){
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
		String[] definitionNames = applicationContext.getBeanDefinitionNames();
		for (String name : definitionNames) {
			System.out.println(name);
		}
	}
}

结果:

 

注:@ComponentScans可以添加多个扫描规则,下个扫描规则在上一个规则基础之上过滤

@ComponentScans(
		value = {
				@ComponentScan(value="com.atguigu",includeFilters = {
					  @Filter(type=FilterType.ANNOTATION,classes={Controller.class}),
					  @Filter(type=FilterType.ASSIGNABLE_TYPE,classes{BookService.class}),
					  @Filter(type=FilterType.CUSTOM,classes={MyTypeFilter.class})
				},useDefaultFilters = false)	
		}
		)

 

 

======以下于你或许是个好消息======

 

好消息就是:欢迎访问下面的博客网站哈哈哈......


网站名称:Java学习笔记网 (点击进入)

url:https://www.javaxxbj.com/ (点击进入)

网站特点:

  1. java主要网站的导航目录
  2. 你可以记录自己的博客,并可以控制显示和隐藏,可利于管理啦!!!
  3. 可以添加收藏各个网站的链接!!!
  4. 甚至也可以文章收藏,点赞,关注,查看我的消息等功能哦!!1

看一小点点的截图:

或可一试哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring注解@ComponentScan自定义扫描类 的相关文章

随机推荐

  • 宝塔面板升级踩坑:ImportError: class/PluginLoader.so: undefined symbol: PyImport_GetModule

    今天在宝塔面板升级了PHP8 但是站点的PHP版本选择仍然没有PHP8以上的版本 百度了一下说是要升级宝塔面板 于是在面板首页右上角进行了升级 结果升级后发现安全入口无法打开 于是用ssh登录服务器 执行命令 etc init d bt d
  • 推荐 20 款 IDEA 主题!

    官方对主题模块的介绍 作为一名开发人员 您需要使用大量文本资源 编辑器中的源代码 搜索结果 调试器信息 控制台输入和输出等等 颜色和字体样式用于格式化这个文本 并帮助您更好地理解它一目了然 个人感觉 每天我们大半的时间都是在跟代码打交道 时
  • Vue前端代码风格指南超级详细

    本文仅作日常项目开发中的知识补充 不必按顺序阅读 如果已经知悉 请跳过 一 命名规范 现有常用的命名规范 camelCase 小驼峰 首字母小写 PsscalCase 大驼峰 首字母大写 kebab case 短横线连接式 Snake 下划
  • VSCode好用的插件

    文章目录 前言 1 Snippet Creator easy snippet 自定义代码 2 Indent Rainbow 代码缩进 3 Chinese Simplified Language Pack 中文包 4 Path Intelli
  • react项目配置 @ 为src根目录

    前置 修改jsconfig json文件 compilerOptions jsx react experimentalDecorators true baseUrl paths src 1 原生create react app 的情况 若已
  • 16、什么是拟牛顿法(Quasi-Newton Methods)?

    拟牛顿法是求解非线性优化问题最有效的方法之一 于20世纪50年代由美国Argonne国家实验室的物理学家W C Davidon所提出来 Davidon设计的这种算法在当时看来是非线性优化领域最具创造性的发明之一 不久R Fletcher和M
  • CSharp: iTextSharp 5.13.2 create pdf

    using System using System Collections Generic using System Web using System Web UI using System Web UI WebControls using
  • 超级卡哇伊的登录框

    css margin 0 padding 0 box sizing border box a color 6a6a6a text decoration none body background color 96c6e2 box displa
  • multi-view clustering指标

    几种 multi view clustering 的指标代码 介绍见 1 3 4 6 有实现 Matching Assignment 由于聚类没有类顺序 而有些指标用到 ground truth labels 如 accuracy 等分类指
  • 操作系统识别

    1 操作系统指纹 操作系统的识别有很多方法 大多跟TCP IP协议有关 操作系统对TCP IP的实现 都是严格遵循RFC标准的 问题RFC标准仅描述了TCP IP的基本要求 并没有对所有内容形成统一的行业标准 于是各操作系统厂商在实现了TC
  • Free FTP Clients 客户端:WinSCP 的 3 种版本 (**)

    安装版 便携版 WinSCP Scripting 自动化 字符编码问题 在跨平台进行文件共享时 涉及到字符的编码问题 采用 ftp一般都可以解决乱码问题 而共享网络文件夹一般不能 ftp的一个问题是 当连接中断时 会造成文件的残缺 有些 f
  • Qt目录树实现

    1 View 根据参考资料 4 的说明 可以使用QTreeView或者QListView来显示目录树 2 Model 2 1 文件系统Model 实现一个系统文件目录树模式 可以选择使用QFileSystemModel或者QDirModel
  • java.lang.ClassCastException: cn.hutool.json.JSONObject cannot be cast toXXXX

    java lang ClassCastException cn hutool json JSONObject cannot be cast toXXXX 除了网上常见解决方案以外 也存在另一种可能导致的类型转换异常 例如 当使用JSONUt
  • Python中的条件循环

    1 if条件 1 1 语法规则 if的语法 if confident 条件判断为布尔型 doing thing true时完成的动作 else doing thing false时完成的动作 1 2 示例 if else 图 1 if示例
  • QT程序发布

    用Release版本运行 将生成的exe文件拷贝到一个空文件夹中 找到QT的cmd窗口 在cmd窗口中 用 cd 命令 进入第一步中建立的空文件夹中 运行命令windeployqt exe文件 将程序需要的库文件都导入该文件中 将整个文件夹
  • Python毕业设计基于django的企业人力资源管理系统

    文末获取资源 收藏关注不迷路 文章目录 一 项目介绍 二 主要使用技术 三 研究内容 四 核心代码 五 文章目录 一 项目介绍 在互联网信息技术时代中 企业管理更多的是使用管理系统进行智能化控制 提高单位的核心竞争力 适应快节奏的生产活动
  • 二分查找 binarySearch

    二分查找 binarySearch 基本概念 时间复杂度和空间复杂度 如何取mid Level 1 一般实现 迭代法 递归法 Level 2 First or Last Position of Target Last Position of
  • ue4 VR测量

    1 在tick函数里面构建测量需要的射线 2 在控制器书写测量函数
  • 数据结构和算法的基本概念, 算法复杂度,时间,空间复杂度

    目录 概念 大O时间复杂度表示法 看几个例子 加法规则 乘法规则 例子 算法时间复杂度计算规则 常见算法时间复杂度 O 1 O 1
  • Spring注解@ComponentScan自定义扫描类

    注 ComponentScan是用在配置类上的 配置类用 Configuration标记 Filter定义扫描规则 FilterType ANNOTATION 按照注解 FilterType ASSIGNABLE TYPE 按照给定的类型