上一篇:Spring5 源码分析-容器刷新-@Import(普通类)java
一样是导入配置信息的类,可是能够在导入以前根据传入的到selectImports方法上的注解元数据信息进行逻辑判断,实现灵活的控制、进而达到特有逻辑导入的目的spring
自定义导入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