@ComponentScan自定义过滤规则
1. 工程搭建
首先创建一个maven工程,pom如下
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
</dependencies>
2. 创建如下工程结构
其中三层架构中的类都是一个空类,但在类上标了对应的注解
3.自定义过滤规则类
此处只有在类上标注了@controller注解的类才会被扫描加入到容器中
public class CustomFilterType implements TypeFilter {
/**
*
* @param metadataReader 扫描的当前类的元数据信息
* @param metadataReaderFactory 获取其他类的信息
* @return
* @throws IOException
*/
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//获取当前类注解信息
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
//获取当前类的类信息
ClassMetadata classMetadata = metadataReader.getClassMetadata();
//类路径
Resource resource = metadataReader.getResource();
//打印扫描到的类
System.out.println("被扫描到的类:" + classMetadata.getClassName());
//true 代表通过
if (annotationMetadata.getAnnotationTypes().contains(Controller.class.getCanonicalName()))
return true;
return false;
}
}
4. 定义一个配置类
在此类中主要是定义扫描那些包,然后在利用上刚刚定义的顾虑规则类
@Configuration
@ComponentScan(basePackages = {"com.hgy"}, includeFilters = {
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = {CustomFilterType.class})
}, useDefaultFilters = false)
public class MyConfiguration {
}
5. 启动类中测试
public class Entry {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
//获取容器中定义的bean的名称
String[] beanDefinitionNames = context.getBeanDefinitionNames();
System.out.println("被加入到Spring容器中的类:");
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println(beanDefinitionName);
}
}
}
版权声明:本文为sui_feng_piao_guo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。