今天给大家分享Spring中@ComponentScan注解的用法,希望对大家能有所帮助!

1、@ComponentScan注解的作用

@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定义包扫描的规则,然后根据定义的规则找出哪些需类需要自动装配到spring的bean容器中,然后交由spring进行统一管理。

说明:针对标注了@Controller、@Service、@Repository、@Component 的类都可以别spring扫描到。

2、@ComponentScan注解属性介绍

2.1 value

指定要扫描的包路径

2.2 excludeFilters(排除规则)

excludeFilters=Filter[] 指定包扫描的时候根据规则指定要排除的组件

2.3 includeFilters(包含规则)

includeFilters =Filter[] 指定包扫描的时候根据规则指定要包含的组件.

注意:要设置useDefaultFilters = false(系统默认为true,需要手动设置) includeFilters包含过滤规则才会生效。

2.4 FilterType属性

FilterType.ANNOTATION:按照注解过滤

FilterType.ASSIGNABLE_TYPE:按照给定的类型,指定具体的类,子类也会被扫描到

FilterType.ASPECTJ:使用ASPECTJ表达式

FilterType.REGEX:正则

FilterType.CUSTOM:自定义规则

useDefaultFilters: 配置是否开启可以对加@Component,@Repository,@Service,@Controller注解的类进行检测, 针对Java8 语法可以指定多个@ComponentScan,Java8以下可以用 @ComponentScans() 配置多个规则

3、示例

3.1 各种过滤过滤规则示例

// includeFilters 用法 包含Animal.class类可以被扫描到,包括其子类
@ComponentScan(value = "com.spring"includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {Animal.class}
)}
)// excludeFilters 用法 排除包含@Controller注解的类
@ComponentScan(value = "com.spring", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class}),})// ComponentScans用法
@ComponentScans(value = {@ComponentScan(value = "com.spring", includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})}, useDefaultFilters = false) ,@ComponentScan(value = "com.spring", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = { Repository.class})})}
)*/// @ComponentScan
// 针对Java8 语法可以指定多个@ComponentScan,Java8以下可以用 //@ComponentScans() 配置多个规则
@ComponentScan(value = "com.spring", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class, Controller.class}),}, includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class, Controller.class}),})

3.2 自定义过滤规则 需要新建 TestTypeFilter.java

package com.spring.config;import org.springframework.core.io.Resource;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.ClassMetadata;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;import java.io.IOException;/*** metadataReader 读取到当前正在扫描的类信息* metadataReaderFactory 可以获取到其他任何类的信息*/
public class TestTypeFilter implements TypeFilter {public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {//获取当前类注解信息AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();// 获取当前正在扫描的类信息ClassMetadata classMetadata = metadataReader.getClassMetadata();// 获取当前类资源信息(比如类的文件路径)Resource resource = metadataReader.getResource();String className = classMetadata.getClassName();System.out.println("类名:" + className);if (className.contains("controller")) {return true;} else {return false;}}
}

3.3 新建测试类  TestComponentScan.java

package com.spring.test;import com.spring.config.TestComponentScanConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestComponentScan {public static void main(String[] args) {AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(TestComponentScanConfig.class);String[] names = annotationContext.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}}
}

具体的运行效果可以查看控制台输出结果,是否和预期的一样,具体有不清楚的欢迎沟通交流。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

Spring系列(三):@ComponentScan注解用法介绍相关推荐

  1. Spring系列(十一):@Profile 注解用法介绍

    今天给大家分享Spring属性注入的注解@Profile 介绍,希望对大家能有所帮助! 一.@Profile 注解的作用 在Spring容器中如果存在同一类型的多个组件,可以使用@Profile注解标 ...

  2. Hadoop系列 (三):HDFS详细介绍

    文章目录 Hadoop系列文章 HDFS简介 HDFS基本概念 分布式文件系统特点 HDFS设计目标 HDFS架构 HDFS应用场景 HDFS三大组件 NameNode SecondaryNameNo ...

  3. Spring系列(七):@FactoryBean注解用法介绍

    今天给大家介绍@FactoryBean注解用法,希望对大家能有所帮助! 1.@FactoryBean注解介绍 FactoryBean是实现了FactoryBean<T>接口的Bean,可以 ...

  4. Spring系列(二):Bean注解用法介绍

    今天给大家介绍一下Spring中Bean注解的用法,后续的文章给大家介绍Sping其他注解用法,希望对大家日常工作能有所帮助! 1.首先创建一个maven项目引入spring依赖 <depend ...

  5. Spring系列(十):@Autowired 和@Resource注解用法介绍

    今天给大家分享Spring属性注入的注解@Autowired 和@Resource介,希望对大家能有所帮助! 一.@Autowired 注解 1.1 介绍 @Autowired注解默认按照类型容器中找 ...

  6. Spring系列(六):@Conditional注解用法介绍

    今天给大家介绍@Conditional懒加载注解用法,希望对大家能有所帮助! 1.@Conditional注解介绍 @Conditional是Spring4版本新提供的一种注解,它的作用是按照设定的条 ...

  7. Spring系列(五):@Lazy懒加载注解用法介绍

    今天给大家介绍@Lazy懒加载注解用法,希望对大家能有所帮助! 1.@Lazy 懒加载注解的概念 SpringIoC容器会在启动的时候实例化所有单实例 bean .如果我们想要实现 Spring 在启 ...

  8. Spring系列(四):@Scope注解用法介绍

    今天给大家分享Spring中@Scope注解的用法,希望对大家能有所帮助! @Scope 定义以及作用 @Scope注解主要作用是调节Ioc容器中的作用域,在Spring IoC容器中主要有以下五种作 ...

  9. Spring系列(三) Bean装配的高级技术

    profile 不同于maven的profile, spring的profile不需要重新打包, 同一个版本的包文件可以部署在不同环境的服务器上, 只需要激活对应的profile就可以切换到对应的环境 ...

最新文章

  1. jQ进阶篇--jQuery封装placeholder效果,让低版本浏览器支持该效果
  2. python如何使用apriori_python-如何加快基于Apriori框架的速度,以仅生...
  3. jfinal上传图片,生成日期文件夹,图片重命名
  4. 中年职场危机,这是我看过最靠谱的建议
  5. wxWidgets:wxSearchCtrl类用法
  6. 学习笔记(45):Python实战编程-键盘事件
  7. PHPCMS商城:模块_购物车+订单模块(资源合集)
  8. 模式分享 公众号_微信公众号+()模式营销!公众号还可以这样玩?
  9. VxRack与VxRail遭受Power的“全面入侵”
  10. Python大佬分析了15万歌词,告诉你民谣歌手们到底在唱什么
  11. 常见的立体匹配算法介绍
  12. 三款 Mac 远程控制(远程桌面)工具
  13. javascript实现有序map
  14. 从空城计到阿尔法狗,博弈论如何渗透我们的生活?
  15. 对齐函数:ALIGN()
  16. JS 数字,金额 用逗号 隔开(数字格式化)
  17. MAC使用SSH连接IPhone
  18. modelsim-SE仿真error问题
  19. JS鼠标滑过图片时切换图片
  20. pytorch每日一学22(torch.empty()、torch.empty_like()、torch.empty_strided())创建未初始化数据的tensor

热门文章

  1. webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)...
  2. 使用jstree创建无限分级的树(ajax动态创建子节点)
  3. [转]extern使用方法总结
  4. 马来西亚热情拥抱阿里巴巴 马云倡议的eWTP首次落地海外
  5. opencv 模板匹配(cvMatchTemplate)
  6. 【Python生成readme文件】——Markdown语法
  7. matlab中udt函数,《MATLAB信号处理超级学习手册》——2.5 离散时间信号中的运算...
  8. 人才管理是什么意思_上海托管仓库外包仓库管理什么意思
  9. 值重新赋值_JavaScript-赋值运算符
  10. ORA-12154: TNS:could not resolve the connect identifier specified. Solved.