上一篇: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