Spring之ImportSelector接口
2022-03-02 本文已影响0人
engineer_tang
1. 简介
接口由类型实现,这些类型根据给定的选择标准(通常是一个或多个注释属性)确定应导入哪个@Configuration类。
ImportSelector可以实现以下任何感知接口,在selectImports之前将调用它们各自的方法:
EnvironmentAware
BeanFactoryAware
BeanClassLoaderAware
ResourceLoaderAware
或者,该类可以为单个构造函数提供以下一种或多种受支持的参数类型:
Environment
BeanFactory
ClassLoader
ResourceLoader
ImportSelector实现的处理方式通常与常规@Import注释相同,但是,也可以推迟选择导入,直到所有@Configuration类都已处理完毕(有关详细信息,请参阅DeferredImportSelector)。
2. 接口分析
public interface ImportSelector {
String[] selectImports(AnnotationMetadata importingClassMetadata);
@Nullable
default Predicate<String> getExclusionFilter() {
return null;
}
}
2.1 selectImports方法
根据importing@Configuration类的注解元数据,选择并返回应导入的类的名称。
返回:类名,如果没有,则为空数组
2.2 getExclusionFilter方法
这是接口的默认实现方法,返回一个谓词,用于从导入候选对象中排除类,该谓词可传递地应用于通过该选择器的导入找到的所有类。
如果该谓词对于给定的完全限定类名返回true,则该类将不会被视为导入的配置类,从而绕过类文件加载和元数据自省。
返回:传递导入的配置类的完全限定候选类名的筛选器谓词,如果没有,则为null