spring包扫描规则

包扫描详解

<contextcomponent-scan base-package =“xx.test.*”use-default-filters =“false”>

base-package:要扫描的包
use-default-filters:是否使用默认的过滤器,默认为true,即扫描@Component, @Repository, @Service, @Controller这些注解的Bean
context:include-filter:使用白名单过滤器
context:exclude-filter:使用黑名单过滤器

Spring 的使用顺序是: 先 exclude-filter,再到include-filter。
在源码的位置内容里面有org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider的方法里:

protected boolean isCandidateComponent(MetadataReader metadataReader) throws IOException {
    for (TypeFilter tf : this.excludeFilters) {
        if (tf.match(metadataReader, this.metadataReaderFactory)) {
            return false;
        }
    }
    for (TypeFilter tf : this.includeFilters) {
        if (tf.match(metadataReader, this.metadataReaderFactory)) {
            AnnotationMetadata metadata = metadataReader.getAnnotationMetadata();
            if (!metadata.isAnnotated(Profile.class.getName())) {
                return true;
            }
            AnnotationAttributes profile = MetadataUtils.attributesFor(metadata, Profile.class);
            return this.environment.acceptsProfiles(profile.getStringArray("value"));
        }
    }
    return false;
}

具体其他类型还有:

type=`annotation`
type=`assignable`
type=`aspectj`
type=`regex`
type=`custom`
阅读更多

扫码向博主提问

twjitm

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • java
  • spring
  • mybatis
  • hibernate
  • javaweb
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_23086307/article/details/80332692
个人分类: javaWeb开发 springmvc
上一篇spring 容器被初始化两次解决办法
下一篇Netty实战开发(1):Netty 的自带解码器
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭