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

相關文章
相關標籤/搜索