Spring5 源码分析-容器刷新-@Import(类 implments ImportSelector)

上一篇:Spring5 源码分析-容器刷新-@Import(普通类)java

 

功能说明

一样是导入配置信息的类,可是能够在导入以前根据传入的到selectImports方法上的注解元数据信息进行逻辑判断,实现灵活的控制、进而达到特有逻辑导入的目的spring

举例Demo

自定义导入ImportSelector实现类ide

public class MyImportSelector implements ImportSelector{

	@Override
	public String[] selectImports(AnnotationMetadata importingClassMetadata) {
		System.out.println("my ImportSelector  !!!");
		return new String[]{ImportConfigClass.class.getName()};
	}

}

经过它导入上一篇自定义的配置类源码分析

主配置类代码spa

@ComponentScan("com.jv.spring.importannotation.scan")
@Configuration
@PropertySource("classpath:au.properties")
@Import(MyImportSelector.class)
public class ImportSpringAppConfig{
}

 被导入的普通配置类.net

@ComponentScan("com.jv.spring.importannotation.importscan")
public class ImportConfigClass {
}

源码分析

图中括号括住的部分即为源码中处理的部分,它会递归调用当前processImports方法,只有当自定义的ImportSelector中的selectImports方法中返回的类再也不是ImportSelector的实现类,就能够结束递归调用,转而进行其余分支处理。3d

下一篇:Spring5 源码分析-容器刷新-@Import(类 implments DeferImportSelector)code

相关文章
相关标签/搜索