【Spring boot】启动过程源码分析( 三 )

准备spring容器的操作private void prepareContext(DefaultBootstrapContext bootstrapContext, ConfigurableApplicationContext context, ConfigurableEnvironment environment, SpringApplicationRunListeners listeners, ApplicationArguments applicationArguments, Banner printedBanner) {// 设置环境变量到spring容器context.setEnvironment(environment);// 设置在SpringApplication上的BeanNameGenerator、resourceLoader设置到spring容器中postProcessApplicationContext(context);// 使用ApplicationContextInitializer初始化spring容器applyInitializers(context);// 容器初始化完成,发布ApplicationContextInitializedEvent事件listeners.contextPrepared(context);// 关闭引导的容器bootstrapContext.close(context);if (this.logStartupInfo) {logStartupInfo(context.getParent() == null);logStartupProfileInfo(context);}// 注册一些单例Bean// Add boot specific singleton beansConfigurableListableBeanFactory beanFactory = context.getBeanFactory();beanFactory.registerSingleton("springApplicationArguments", applicationArguments);if (printedBanner != null) {beanFactory.registerSingleton("springBootBanner", printedBanner);}// spring容器设置AllowCircularReferences和allowBeanDefinitionOverridingif (beanFactory instanceof AbstractAutowireCapableBeanFactory) {((AbstractAutowireCapableBeanFactory) beanFactory).setAllowCircularReferences(this.allowCircularReferences);if (beanFactory instanceof DefaultListableBeanFactory) {((DefaultListableBeanFactory) beanFactory).setAllowBeanDefinitionOverriding(this.allowBeanDefinitionOverriding);}}if (this.lazyInitialization) {context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor());}// Load the sources// 拿到启动配置(run方法传递进来的)Set<Object> sources = getAllSources();Assert.notEmpty(sources, "Sources must not be empty");// 将启动配置类解析为BeanDefinition注册到spring容器load(context, sources.toArray(new Object[0]));// 发布ApplicationPreparedEvent事件,表示已经启动好spring容器listeners.contextLoaded(context);}结束语

  • 你的点赞是我提高文章质量最大的动力?。。?/li>
  • 获取更多本文的前置知识文章,以及新的有价值的文章,让我们一起成为架构师!
  • 目前已经完成了并发编程、MySQL、spring源码、Mybatis的源码 。可以在公众号下方菜单点击查看之前的文章!
  • 这个公众号的所有技术点 , 会分析的很深入!
  • 这个公众号,无广告?。。?
    【Spring boot】启动过程源码分析

    文章插图

推荐阅读