@ComponentScan注解_笔记

@ComponentScan是Spring的包扫描组件,作用在配置类上。

其常用属性介绍:

value:代表需要扫描的包,扫描包下的Controller,Service, Repository,Component注解标注的类,将其注入IOC容器

例子:

@ComponentScan(value="com.testSpringAnnotation")

 意思是扫描"com.testSpringAnnotation"包下Controller,Service, Repository,Component注解标注的类

excludeFilters :是一个 Filter[]数组,作用是排除不需要扫描的包或者类。Filter[]数组里面需要@Filter指定过滤规则,@Filter的type属性表示过滤的规则;@Filter的classes属性是个数组,里面包含需要过滤的类。

例子:

@ComponentScan(value="com.testSpringAnnotation",excludeFilters= {
		@Filter(type=FilterType.ANNOTATION,classes= {Controller.class})
       })

意思是:扫描"com.testSpringAnnotation"包,除了Controller注解标注的类,其他三个组件标注的类注入IOC容器

 includeFilters :是一个 Filter[]数组,作用是指定扫描的时候只需要包含哪些组件。用法与excludeFilters相同

useDefaultFilters:默认过滤规则选项,false时,可以自定义过滤规则 

例子:

@ComponentScan(value="com.testSpringAnnotation",excludeFilters= {
		@Filter(type=FilterType.ANNOTATION,classes= {Controller.class})
       },useDefaultFilters = false)

 

对于 @Filter的type属性,有以下五种:

FilterType.ANNOTATION:按照注解(常用)

FilterType.ASSIGNABLE_TYPE:按照给定的类型(常用)

FilterType.ASPECTJ:使用ASPECTJ表达式(不常用)

FilterType.REGEX:使用正则表达式

FilterType.CUSTOM:使用自定义规则,需要实现TypeFilter接口,返回true或false来决定是否匹配

 对于使用自定义规则,下面举个例子:

public class MyTypeFilter implements TypeFilter {

	/*
	 * MetadataReader:读取到的当前正在扫描的类的信息
	 * MetadataReaderFactory:可以获取到其他任何类的信息
	 */
	@Override
	public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) 
throws IOException {
		//获取当前类注解的信息
		AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
		//获取当前正在扫描类的类信息
		ClassMetadata classMetadata = metadataReader.getClassMetadata();
		//获取当前类资源(类的路径,哪个class文件等)
		Resource resource = metadataReader.getResource();
		
		String className = classMetadata.getClassName();
                //自定义代码部分
		System.out.println("-->"+className);//这句打印可以看出扫描顺序
		if(className.contains("er")) {//类名包含er,则匹配成功.匹配成功的类会加载进容器中
			return true;
		}
		return false;
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值