springboot 配置文件其它补充【转】【补】
TypeFilter组件扫描类过滤器
MyTypeFilter.java
可以对扫描的类做过滤处理,将扫描到的类替摘除或追加到spring窗口中
package com.bobo.code.filter; 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; public class MyTypeFilter implements TypeFilter { /** * * MetadataReader 读取到当前正在扫描类的信息 * MetadataReaderFactory 可以获取到其他任何类信息 * * @param metadataReader * @param metadataReaderFactory * @return * @throws IOException */ @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { ClassMetadata classMetadata = metadataReader.getClassMetadata(); System.out.println("当前正在被扫描的类的类名: " + classMetadata.getClassName()); if (classMetadata.getClassName().contains("Service")){ //AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata(); //for (String s : annotationMetadata.getAnnotationTypes()) { // System.out.println("当前正在被扫描的类注解类型: " + s); //} //Resource resource = metadataReader.getResource(); //System.out.println("当前正在被扫描的类存放的地址: " + resource.getURL()); System.out.println("匹配到的类名: " + classMetadata.getClassName()); return true; }else{ return false; } } }
FilterType类型
public enum FilterType { ANNOTATION,//按照注解方式 ASSIGNABLE_TYPE,//按照指定类型的方式 ASPECTJ,//使用ASPECTJ表达式的方式-------没用过,不演示 REGEX,//利用正则表达式进行指定-----------没用过,不演示 CUSTOM//自己实现TypeFilter接口进行自定义规则(如下面的代码) }
定义和使用
@ComponentScan(value = "com.sisi.code", useDefaultFilters = false, includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class) })//includeFilters中useDefaultFilters 必须等于 false @ComponentScan(value = "com.sisi.code", useDefaultFilters = true, excludeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class) })//excludeFilters时useDefaultFilters 必须等于 true(默认本来就为true) public class MyConfiguration { }
规则
includeFilters的match为结果true时,则被扫描到的组件最终会包含到sping的bean组件中 , includeFilters中useDefaultFilters 必须等于 false
excludeFilters的match结果为true时,则被扫描到的组件最终不会含到sping的bean组件中
如果includeFilters和excludeFilters都被命中,且都返回了true,则以includeFilters为更高优先级,即只要被包含一次就不会被剔除.
且TypeFilter的匹配规则永远只触发一次, 会被同时应用到includeFilters和excludeFilters中
.
感觉空虚寂寞,只是因为你无所关注,无处付出。