调用方法顺序

refresh()

invokeBeanFactoryPostProcessors(beanFactory)

调用各种beanFactory处理器

PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())

通过getBeanFactoryPostProcessors()来获取已经注册的BFPP

invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry)

执行postProcessBeanDefinitionRegistry方法

postProcessor.postProcessBeanDefinitionRegistry(registry)

调用 postProcessor 的 postProcessBeanDefinitionRegistry以使得postProcess往registry注册BeanDefinition对象

processConfigBeanDefinitions(registry)

处理配置类的bean定义信息

parser.parse(candidates)

解析带有@Controller、@Import、@ImportResource、@ComponentScan、@ComponentScans、@Bean的BeanDefinition

parse(((AnnotatedBeanDefinition) bd).getMetadata(), holder.getBeanName())

注解类型

processConfigurationClass(new ConfigurationClass(metadata, beanName), DEFAULT_EXCLUSION_FILTER)

根据注解元数据和beanName解析配置文件,有注解元数据

doProcessConfigurationClass(configClass, sourceClass, filter)

解析各种注解