创建IOC容器createApplicationContext()protectedConfigurableApplicationContextcreateApplicationContext(){returnthis.applicationContextFactory.create(this.webApplicationType);}=============根据当前应用类型(Servlet)创建容器//当前会创建AnnotationConfigServletWebServerApplicationContextApplicationContextFactoryDEFAULT=(webApplicationType)->{try{switch(webApplicationType){caseSERVLET:返回新的AnnotationConfigServletWebServerApplicationContext();默认值:返回新的AnnotationConfigApplicationContext();}}catch(Exceptionex){thrownewIllegalStateException("无法创建默认的ApplicationContext实例,"+"您可能需要一个自定义的ApplicationContextFactory",ex);}};准备ApplicationContextIOC容器的基本信息prepareContext()privatevoidprepareContext(DefaultBootstrapContextbootstrapContext,ConfigurableApplicationContextcontext,ConfigurableEnvironmentenvironment,SpringApplicationRunListenerslisteners,ApplicationArgumentsapplicationArguments,Banner){保存之前的环境printedBannersetEnvironment(environment);//IOC容器的后处理过程postProcessApplicationContext(上下文);//应用初始化器:applyInitializersapplyInitializers(context);//遍历所有的监听器,调用contextPrepared//ioc容器的环境准备好了(contextPrepared方法源码在下面)listeners.contextPrepared(context);//bootcontext的环境关闭bootstrapContext.close(context);如果(this.logStartupInfo){logStartupInfo(context.getParent()==null);logStartupProfileInfo(上下文);}//添加引导特定的单例bean//获取bean工厂ConfigurableListableBeanFactorybeanFactory=context.getBeanFactory();//注册单个实例beanFactory.registerSingleton("springApplicationArguments",applicationArguments);//打印横幅if(printedBanner!=null){beanFactory.registerSingleton("springBootBanner",printedBanner);}if(beanFactoryinstanceofDefaultListableBeanFactory){((DefaultListableBeanFactory)beanFactory).setAllowBeanDefinitionOverriding(this.allowBeanDefinitionOverriding);}if(this.lazyInitialization){context.addBeanFactoryPostProcessor(newLazyInitializationBeanFactoryPostProcessor());}//加载资源Set