springboot启动配置原理之二(运行run方法)

MagicAsa      2022-05-03     801

关键词:

public ConfigurableApplicationContext run(String... args) {
   StopWatch stopWatch = new StopWatch();
   stopWatch.start();
   ConfigurableApplicationContext context = null;
   FailureAnalyzers analyzers = null;
   configureHeadlessProperty();
    
   //获取SpringApplicationRunListeners;从类路径下META-INF/spring.factories
   SpringApplicationRunListeners listeners = getRunListeners(args);
    //回调所有的获取SpringApplicationRunListener.starting()方法
   listeners.starting();
   try {
       //封装命令行参数
      ApplicationArguments applicationArguments = new DefaultApplicationArguments(
            args);
      //准备环境
      ConfigurableEnvironment environment = prepareEnvironment(listeners,
            applicationArguments);
            //创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成
       
      Banner printedBanner = printBanner(environment);
       
       //创建ApplicationContext;决定创建web的ioc还是普通的ioc
      context = createApplicationContext();
       //异常报告
      analyzers = new FailureAnalyzers(context);
       //准备上下文环境;将environment保存到ioc中;而且applyInitializers();
       //applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法
       //回调所有的SpringApplicationRunListener的contextPrepared();
       //prepareContext运行完成以后回调所有的 SpringApplicationRunListener的contextLoaded();
      prepareContext(context, environment, listeners, applicationArguments,
            printedBanner);
      
       //s刷新容器;ioc容器初始化(如果是web应用还会创建嵌入式的Tomcat);Spring注解版
       //扫描,创建,加载所有组件的地方;(配置类,组件,自动配置)
      refreshContext(context);
       //从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调
       //ApplicationRunner先回调,CommandLineRunner再回调
      afterRefresh(context, applicationArguments);
 
       //所有的SpringApplicationRunListener回调finished方法
      listeners.finished(context, null);
      stopWatch.stop();
      if (this.logStartupInfo) {
         new StartupInfoLogger(this.mainApplicationClass)
               .logStarted(getApplicationLog(), stopWatch);
      }
       //整个SpringBoot应用启动完成以后返回启动的ioc容器;
      return context;
   }
   catch (Throwable ex) {
      handleRunFailure(context, listeners, analyzers, ex);
      throw new IllegalStateException(ex);
   }
}

//获取SpringApplicationRunListeners;从类路径下META-INF/spring.factories

//回调所有的获取SpringApplicationRunListener.starting()方法

 //准备环境

//创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成

 //创建ApplicationContext;决定创建web的ioc还是普通的ioc

//准备上下文环境;将environment保存到ioc中;而且applyInitializers();
//applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法
//回调所有的SpringApplicationRunListener的contextPrepared();
//prepareContext运行完成以后回调所有的 SpringApplicationRunListener的contextLoaded();

 
 

//从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调
//ApplicationRunner先回调,CommandLineRunner再回调

 
 //所有的SpringApplicationRunListener回调finished方法

springboot核心原理:自动配置、事件驱动、condition

参考技术ASpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本非常低,但是学习其实现原理的成本大大增加,需要先了解熟悉Spring原理。如果还不清楚Spring原理的,可以先查看博主之前的文章,本篇主... 查看详情

springboot的配置文件说明

1、以servlet的方式启动SpringBoot正常情况下要复制代码到tomcat去启动,但springboot内置tomcat了,配置好就可以直接run方法直接运行。  2、直接run运行  查看详情

一文搞懂springboot启动原理

SpringBoot为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开SpringBoot的神秘面纱,让它不再神秘。@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.c... 查看详情

面试题:springboot的自动配置原理及定制starter(代码片段)

3、SpringBoot的自动配置原理packagecom.mmall;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassDemoApplication publicstaticvoidmain(String[]args) SpringApplication.run(DemoApplication.class,arg... 查看详情

最全面的springboot教程——springboot运行原理分析(代码片段)

前言本文为最全面的SpringBoot教程(六)——SpringBoot运行原理分析相关知识,下边将对SpringBoot运行原理以及自动配置原理进行详尽的分析介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考ÿ... 查看详情

springboot-运行部署

...的标准方法。我们的main方法SpringApplication通过调用委托给SpringBoot的类run。SpringApplication引导我们的应用程序,启动Spring,然后启动自动配置的TomcatWeb服务器。我们需要Example.class作为参数传递给run方法,以告诉SpringApplication哪个 查看详情

springboot怎么启动

SpringBoot是Spring产品中一个新的子项目,致力于简便快捷地搭建基于Spring的独立可运行的应用。大多数的SpringBoot应用只需要非常少的Spring配置。你能够使用SpringBoot创建Java应用并通过java-jar来运行或者创建传统的通过war来部署的应... 查看详情

boot自动配置的原理

参考技术ASpringBoot是基于Spring开发的,是约定大于配置的核心思想。并且集成了大量的第三方库配置比如redis、mongoDB、jpa等。SpringBoot就相当于maven整合了所有jar包,SpringBoot整合了所有框架。其设计目的是用来简化新Spring应用的初... 查看详情

springboot运行原理

参考技术ASpringBoot是一个基于Spring开发,集成了大量第三方库配置的javaweb开发框架pom.xml父依赖其中它主要是依赖一个父项目,主要是管理项目的资源过滤及插件。以后我们导入依赖默认是不需要写版本的。启动器spring-boot-starters... 查看详情

springboot启动原理

从一个SpringBoot启动类说起。@SpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(Stirng[]args){SpringApplication.run(DemoApplication.class,args);}}@SpringBootApplication是以下三个Annotation的复合:@Con 查看详情

涨姿势:springboot2.x启动全过程源码分析

目录SpringApplication实例run方法运行过程总结上篇《SpringBoot2.x启动全过程源码分析(一)入口类剖析》我们分析了SpringBoot入口类SpringApplication的源码,并知道了其构造原理,这篇我们继续往下面分析其核心run方法。SpringApplication实... 查看详情

springboot工作原理

SpringBoot为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开SpringBoot的神秘面纱,让它不再神秘。 @SpringBootApplication publicclassApplication{ publicstaticvoidmain(String[]args){ SpringAppli... 查看详情

springboot的工作原理

参考技术A承接springmvc的工作原理,这里探讨springboot是如何工作的,由springboot的启动类SpringbootdemoSimpleApplication.java开始,我们知道,如果想把springboot的项目打包放到tomcat里运行,需要将启动类继承SpringBootServletInitializer因为SpringB... 查看详情

springboot启动原理(代码片段)

正文我们开发任何一个SpringBoot项目,都会用到如下的启动类123456@SpringBootApplicationpublicclassApplicationpublicstaticvoidmain(String[]args)SpringApplication.run(Application.class,args);从上面代码可以看出,Annot 查看详情

springboot核心原理:自动配置事件驱动condition(代码片段)

...了解来源:blog.csdn.net/l6108003/article/details/106966386前言SpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本非常低,但是学习其实现原理的成本大大增加,需要先了解熟悉Spring原理。如... 查看详情

springbootrun方法啥时候扫描的配置类

SpringBootRun方法会在应用启动时扫描配置类。SpringBootRun方法是一个静态方法,它可以接受一个参数,该参数是一个字符串数组,其中包含要传递给应用程序的参数。SpringBootRun方法会调用SpringApplication类的run方法,该方法会接受一... 查看详情

springboot启动配置原理

几个重要的事件回调机制ApplicationContextInitializerSpringApplicationRunListenerApplicationRunnerCommandLineRunner 启动流程1.创建SpringApplication对象1initialize(sources);2privatevoidinitialize(Object[]sources){3//保 查看详情

springboot热启动之二

一、在pom文件添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><scope>true< 查看详情