public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 容器启动的预先准备,记录容器启动的时间和标记 prepareRefresh(); // 创建BeanFactory,如果已有就销毁,没有就创建。此类实现了对BeanDefinition的装载 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); // 配置BeanFactory标准上下文特性,如类装载器,PostProcesser等 prepareBeanFactory(beanFactory); try { // 在bean被装载后,提供一个修改BeanFactory的入口 postProcessBeanFactory(beanFactory); // 调用postProcessBeanFactory invokeBeanFactoryPostProcessors(beanFactory); // 注册用于拦截bean创建过程中的BeanPostProcessors registerBeanPostProcessors(beanFactory); // Initialize message source for this context. initMessageSource(); // Initialize event multicaster for this context. initApplicationEventMulticaster(); // Initialize other special beans in specific context subclasses. onRefresh(); // 注册监听器 registerListeners(); // 完成容器的初始化,里面的preInstantiateSingletons()完成对单例对象的创建 finishBeanFactoryInitialization(beanFactory); // Last step: publish corresponding event. finishRefresh(); } catch (BeansException ex) { // Destroy already created singletons to avoid dangling resources. beanFactory.destroySingletons(); // Reset 'active' flag. cancelRefresh(ex); // Propagate exception to caller. throw ex; } } }