Spring5 源碼分析-容器刷新-@Import(類 implments DeferImportSelector)

上一篇:Spring5 源碼分析-容器刷新-@Import(類 implments ImportSelector)java

功能說明spring

一樣也是導入自定義的配置類,可是經過它導入的配置類會晚於@Import(class implements ImportSelector)導入的配置類和@Configuration配置類被解析與執行。當執行到它的時候,表明着被@Import修飾的配置類的其餘操做已經執行完成。ide

舉例Demo源碼分析

自定義DefferedImportSelectorthis

public class MyDeferImportSelector implements DeferredImportSelector {
	@Override
	public String[] selectImports(AnnotationMetadata importingClassMetadata) {
		return new String[]{ImportConfigClass.class.getName()};
	}
}

主配置類spa

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

源碼分析.net

@Import流程圖請出門左轉看上一篇文章Spring5 源碼分析-容器刷新-@Import(類 implments ImportSelector)設計

在org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass()執行以後再執行this.deferredImportSelectorHandler.process()--handler.processGroupImports()--getImports()--process()--selectImports()  最終依然會在遞歸調用processImports進行真正的導入操做code

 

注:裏面加另外一個Group的概念,有點難,經過DEBUG跟蹤看了看,Group暫時沒用到,之後場景中遇到再來補充其設計的真正用意。blog

下一篇:Spring5 源碼分析-容器刷新-@Import(類 implements ImportBeanDefinitionRegistrar)

相關文章
相關標籤/搜索