prepareRefresh();
initPropertySources();
getEnvironment().validateRequiredProperties();
this.earlyApplicationEvents = new LinkedHashSet<>();
obtainFreshBeanFactory();
refreshBeanFactory();
javaconfig(GenericApplicationContext)<br>
xml(AbstractRefreshableApplicationContext)
loadBeanDefinitions(beanDefinitionReader);
getBeanFactory();<br>
prepareBeanFactory(beanFactory);<br>
setBeanClassLoader(getClassLoader());
setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));
addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));
addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
ignoreDependencyInterface(EnvironmentAware.class);<br>
ignoreDependencyInterface(EmbeddedValueResolverAware.class);
ignoreDependencyInterface(ResourceLoaderAware.class);
ignoreDependencyInterface(ApplicationEventPublisherAware.class);
ignoreDependencyInterface(MessageSourceAware.class);
ignoreDependencyInterface(ApplicationContextAware.class);
ignoreDependencyInterface(ApplicationStartup.class);
registerResolvableDependency(BeanFactory.class, beanFactory);
registerResolvableDependency(ResourceLoader.class, this);
registerResolvableDependency(ApplicationEventPublisher.class, this);
registerResolvableDependency(ApplicationContext.class, this);
addBeanPostProcessor(new ApplicationListenerDetector(this));<br>
setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));
registerSingleton(ENVIRONMENT_BEAN_NAME, getEnvironment());
registerSingleton(SYSTEM_PROPERTIES_BEAN_NAME, getEnvironment().getSystemProperties()
registerSingleton(SYSTEM_ENVIRONMENT_BEAN_NAME, getEnvironment().getSystemEnvironment());
registerSingleton(APPLICATION_STARTUP_BEAN_NAME, getApplicationStartup());
invokeBeanFactoryPostProcessors(beanFactory);<br>
beanFactory实现了BeanDefinitionRegistryPostProcessors<br>
循环自定义的beanFactoryPostProcessors,扫描BeanDefinition并解析<br>
首先筛选出实现PriorityOrdered接口的带注册能力的BeanFactory后置处理器,并实例化BeanFactory后置处理器,先排序,扫描BeanDefinition并解析<br>
再筛选出实现Ordered接口的带注册能力的BeanFactory后置处理器,并实例化BeanFactory后置处理器,先排序,扫描BeanDefinition并解析<br>
最后筛选出没有实现PriorityOrdered和Ordered接口的带注册能力的BeanFactory后置处理器,并实例化BeanFactory后置处理器,先排序,扫描BeanDefinition并解析
由于实现了BeanDefinitionRegistryPostProcessors,也实现了BeanFactoryPostProcessors,所以还会调用invokeBeanFactoryPostProcessors
beanFactory实现BeanFactoryPostProcessors
获取所有实现了BeanFactoryPostProcessors的BeanFactoryPostProcessor<br>
首先筛选出实现PriorityOrdered接口的BeanFactory后置处理器,并实例化BeanFactory后置处理器,先排序,扫描BeanDefinition并解析
再筛选出实现Ordered接口的BeanFactory后置处理器,并实例化BeanFactory后置处理器,先排序,扫描BeanDefinition并解析
最后筛选出没有实现PriorityOrdered和Ordered接口的BeanFactory后置处理器,并实例化BeanFactory后置处理器,先排序,扫描BeanDefinition并解析
registerBeanPostProcessors(beanFactory);<br>
先注册实现PriorityOrdered接口的Bean后置处理器
再注册实现Ordered接口的Bean后置处理器<br>
再注册没实现Ordered和PriorityOrdered接口的Bean后置处理器
finishBeanFactoryInitialization(beanFactory);<br>
beanFactory.freezeConfiguration();
beanFactory.setTempClassLoader(null);
beanFactory.preInstantiateSingletons();
获取所有的BeanDefinition名称,判断是否是factoryBean<br>
getBean(beanName);
doGetBean(name, null, null, false);
finishRefresh();
clearResourceCaches();
initLifecycleProcessor();
getLifecycleProcessor().onRefresh();
publishEvent(new ContextRefreshedEvent(this));
LiveBeansView.registerApplicationContext(this);