SpringBoot是如何将自动化配置类加入到ioc容器中_源码解析

基于SpringBoot 2.6.2版本

总体流程:

org.springframework.context.support.AbstractApplicationContext#refresh
    org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors
        org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors
            org.springframework.context.annotation.ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry
                org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions
                    org.springframework.context.annotation.ConfigurationClassParser#parse(Set<BeanDefinitionHolder> configCandidates)
                    org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#loadBeanDefinitions

org.springframework.context.support.AbstractApplicationContext#refresh

org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors

org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors

org.springframework.context.annotation.ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry

org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions

org.springframework.context.annotation.ConfigurationClassParser#parse(Set<BeanDefinitionHolder> configCandidates)

org.springframework.context.annotation.ConfigurationClassParser#parse(AnnotationMetadata, java.lang.String)

org.springframework.context.annotation.ConfigurationClassParser#processConfigurationClass

org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass

org.springframework.context.annotation.ConfigurationClassParser#processImports

org.springframework.context.annotation.ConfigurationClassParser.DeferredImportSelectorHandler#handle


我们再回去看org.springframework.context.annotation.ConfigurationClassParser#parse(Set<BeanDefinitionHolder> configCandidates)

org.springframework.context.annotation.ConfigurationClassParser.DeferredImportSelectorHandler#process

org.springframework.context.annotation.ConfigurationClassParser.DeferredImportSelectorGroupingHandler#processGroupImports

org.springframework.context.annotation.ConfigurationClassParser.DeferredImportSelectorGrouping#getImports

org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.AutoConfigurationGroup#process

org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getAutoConfigurationEntry

org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations

org.springframework.core.io.support.SpringFactoriesLoader#loadFactoryNames

org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFactories

到这里所有的自动化配置类都收集了,那是如何组装成BeanDefinition,注册到ioc容器中。


我们再回去看org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions

org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#loadBeanDefinitions

org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsForConfigurationClass

org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#registerBeanDefinitionForImportedConfigurationClass

posted @ 2022-01-20 10:51  残城碎梦  阅读(349)  评论(0编辑  收藏  举报