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