首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从源代码讨论SpringApplication的run方法是否会执行两次

SpringApplication的run方法不会执行两次。该方法是Spring Boot应用程序的入口点,用于启动应用程序并执行必要的初始化和配置。当调用run方法时,它会创建一个Spring应用程序上下文,并执行一系列的步骤,包括加载配置、初始化Bean、启动服务器等。在整个过程中,run方法只会被执行一次。

具体来说,SpringApplication的run方法会执行以下步骤:

  1. 创建一个空的Spring应用程序上下文(ApplicationContext)。
  2. 设置应用程序的配置属性,如配置文件路径、激活的配置文件等。
  3. 执行SpringApplicationRunListeners的starting方法,通知所有注册的监听器应用程序即将启动。
  4. 根据配置属性加载应用程序的配置,包括配置文件、注解配置等。
  5. 执行SpringApplicationRunListeners的environmentPrepared方法,通知所有注册的监听器应用程序的环境已准备好。
  6. 创建并刷新应用程序上下文,加载所有的Bean定义并初始化Bean。
  7. 执行SpringApplicationRunListeners的contextPrepared方法,通知所有注册的监听器应用程序上下文已准备好。
  8. 调用ApplicationContext的refresh方法,完成Bean的初始化和依赖注入。
  9. 执行SpringApplicationRunListeners的contextLoaded方法,通知所有注册的监听器应用程序上下文已加载完成。
  10. 启动应用程序的服务器,如Tomcat、Jetty等。
  11. 执行SpringApplicationRunListeners的started方法,通知所有注册的监听器应用程序已启动。
  12. 执行应用程序的逻辑,处理请求和响应。
  13. 执行SpringApplicationRunListeners的running方法,通知所有注册的监听器应用程序正在运行。
  14. 当应用程序关闭时,执行一系列的清理操作,包括关闭服务器、销毁Bean等。
  15. 执行SpringApplicationRunListeners的stopped方法,通知所有注册的监听器应用程序已停止。

总结起来,SpringApplication的run方法只会被执行一次,并且它是Spring Boot应用程序的入口点,负责启动应用程序并执行必要的初始化和配置。在整个过程中,SpringApplication会创建应用程序上下文、加载配置、初始化Bean、启动服务器等,但不会执行两次。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

spring-boot-2.0.3不一样系列之源码篇 - SpringApplicationrun方法(一)之SpringApplicationRunListener,绝对有值得你看地方

:当事件发生时,负责对事件处理       事件环境:整个事件所处上下文,对整个事件提供支持 SpringApplicationRunListener   run方法源代码如下 /** * Run...,我们先来看看ConfigurableApplicationContext,名字来看就是:合适应用上下文,根据class路径下类初始化合适应用上下文,比如是普通spring应用(非web应用...接口注释也简单:       监听SpringApplicationrun方法。...SpringApplication实例和String[]数组公有构造方法。   ...构造方法中调用了两次,分别用来设置属性List<ApplicationContextInitializer<?

87220

SpringBoot运行流程源码分析:run方法流程及监听器

run方法核心流程 在分析和学习整个 run 方法源代码及操作之前,我们先通过图 4-1 所示流程图来看一下SpringApplication 调用 run 方法处理核心操作都包含哪些。...然后,后面的章节我们再逐步细化分析每个过程中源代码实现。 上面的流程图可以看出,SpringApplicationrun 方法中重 点做了以下操作。 .获取监听器和参数配置。...对照流程图,我们再来整体看一下入口 run 方法源代码,核心部分功能已通过注释形式进行说明。...在前面 run 方法代码中已经看到相关监听方法被调用,后续源代码中也将涉及对应方法调用,我们可参考此图以便理解和加深记忆。....对应 ApplicationListener 被触发,执行相应业务逻辑。 下面是 starting 方法源代码,可对照上述流程进行理解。该方法其他功能类似,代码不再展示。

52820
  • springboot启动流程

    main里面调用SpringApplication.run()启动整个Spring Boot程序,该方法所在类需要使用@SpringBootApplication复合注解。...我们可以通过basePackages等属性来细粒度定制@ComponentScan自动扫描范围,如果不指定,则默认Spring框架实现声明@ComponentScan所在类package进行扫描...2、SpringBoot启动流程 1、SpringBoot启动时候,构造一个SpringApplication实例,然后调用这个实例run方法,在run方法调用之前,也就是构造SpringApplication...构造完成之后调用run方法,启动SpringApplicationrun方法执行时候会做以下几件事: 构造一个StopWatch计时器,用来记录SpringBoot启动时间 。...获取SpringApplicationRunListeners并封装到SpringApplicationRunListeners中启动,用于监听run方法执行

    58230

    springboot启动流程(一)构造SpringApplication实例对象

    为什么SpringApplication这个对象说起呢?...} springboot项目从一个main方法开始,main方法将会调用SpringApplicationrun方法开始springboot启动流程。...方法中先是构造了一个SpringApplication实例对象,而后调用了SpringApplication成员方法run,这个run方法将包含springboot启动流程核心逻辑。...本文只讨论SpringApplication实例化过程。 构造函数 跟进SpringApplication构造函数中 public SpringApplication(Class<?...有关于如何spring.factories配置文件中获取配置并构造出实例对象请看:spring.factories配置文件工厂模式 根据堆栈来推断当前main方法所在主类 构造SpringApplication

    53520

    spring-boot-2.0.3不一样系列之源码篇 - springboot源码一,绝对有值得你看地方

    :     SpringApplication用于java main方法引导和启动Spring应用程序,默认情况下,将执行以下步骤来引导我们应用程序:       1、创建一个恰当ApplicationContext...SpringApplication可以各种不同源读取bean。...还是做了不少事,具体实现后续慢慢讲来,今天主角只是SpringApplication构造方法。   ...SpringApplication构造方法     源代码如下 /** * Create a new {@link SpringApplication} instance....当前堆栈跟踪列表中获取main方法所在类名        构造方法总结       1、 构造自身实例       2、 推测web应用类型,并赋值到属性webApplicationType

    1K21

    spring-boot-2.0.3不一样系列之源码篇 - run方法(二)之prepareEnvironment,绝对有值得你看地方

    老规矩:一周至少一更,中途不定期更新一些其他博客,可能是springboot源码,也可能是其他源码解析,也有可能是其他。   路漫漫其修远兮,吾将上下而求索!   ...、另起一个后台线程执行耗时初始化 prepareEnvironment   讲prepareEnvironment之前,我们先来看看我们战绩,我们对run方法完成了多少源码解读 /** * Run...方法源代码比例来看,我们已经完成了将近一半源码解析了,可真是这样吗?...  getOrCreateEnvironment     字面上看,这个方法作用就是获取或创建环境,应该就是存在就直接返回,不存在则创建一个并返回。...,执行完bindToSpringApplication方法后,SpringApplication属性environment仍是null,这我就有点懵圈了,那这个方法到底有什么用,有知道朋友吗?

    1.3K30

    【刨根问底】Spring Boot 启动原理

    因此要研究 Spring Boot 启动原理,我们就需要从这个注解和这个run方法入手。 ? SpringBootApplication ?...以上只是表面来研究 Spring Boot 启动原理,那么,为什么通过 SpringBootApplication 和 SpringApplication.run() 就能启动一个应用程序,它底层到底是怎么实现呢...我们知道,启动类先调用了 SpringApplication 静态方法 run,跟踪进去后发现,它会先实例化 SpringApplication,然后调用 run 方法。...SpringApplication 构造器 ? 在 SpringApplication 构造函数内部,他初始化一些信息: public SpringApplication(Class<?...SpringApplication 执行流程 ? SpringApplication 构造完成后,就会调用 run 方法,这时才真正开始应用程序执行

    43640

    头秃系列,二十三张图带你源码分析Spring Boot 启动流程~

    SpringApplication静态run()方法并不是一步完成,最终执行源码如下: //org.springframework.context.ConfigurableApplicationContext...,分别是创建SpringApplication执行run()方法,下面将分为这两个部分介绍。...总结 SpringApplication构建都是为了run()方法启动做铺垫,构造方法中总共就有几行代码,最重要部分就是设置应用类型、设置初始化器、设置监听器。...作者简单画了张执行流程图,仅供参考,如下: ? 执行run()方法 上面分析了SpringApplication构建过程,一切都做好了铺垫,现在到了启动过程了。...在SpringApplication#run()方法中,源码如下: //spring.factories中获取监听器 SpringApplicationRunListeners listeners =

    2.1K32

    spring boot 启动原理详细解析

    我们可以通过basePackages等属性来细粒度定制@ComponentScan自动扫描范围,如果不指定,则默认Spring框架实现声明@ComponentScan所在类package进行扫描...二、深入探索SpringApplication执行流程 SpringApplicationrun方法实现是我们本次旅程主要线路,该方法主要流程大体可以归纳如下: 1) 如果我们使用SpringApplication...静态run方法,那么,这个方法里面首先要创建一个SpringApplication对象实例,然后调用这个创建好SpringApplication实例方法。...2) SpringApplication实例初始化完成并且完成设置后,就开始执行run方法逻辑了,方法执行伊始,首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载SpringApplicationRunListener...SpringBoot启动类 首先进入run方法 run方法中去创建了一个SpringApplication实例,在该构造方法内,我们可以发现其调用了一个初始化initialize方法 这里主要是为SpringApplication

    1.1K51

    Spring Boot启动原理解析

    ---- 二、深入探索SpringApplication执行流程 SpringApplicationrun方法实现是我们本次旅程主要线路,该方法主要流程大体可以归纳如下: 1) 如果我们使用是...SpringApplication静态run方法,那么,这个方法里面首先要创建一个SpringApplication对象实例,然后调用这个创建好SpringApplication实例方法。...2) SpringApplication实例初始化完成并且完成设置后,就开始执行run方法逻辑了,方法执行伊始,首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载SpringApplicationRunListener...SpringBoot启动类 首先进入run方法 ? run方法中去创建了一个SpringApplication实例,在该构造方法内,我们可以发现其调用了一个初始化initialize方法 ? ?...这里主要是为SpringApplication对象赋一些初值。构造函数执行完毕后,我们回到run方法 ?

    92330

    SpringBoot启动原理解析

    我们可以通过 basePackages 等属性来细粒度定制 @ComponentScan 自动扫描范围,如果不指定,则默认 Spring 框架实现声明 @ComponentScan 所在类 package...二、深入探索 SpringApplication 执行流程 SpringApplication run 方法实现是我们本次旅程主要线路,该方法主要流程大体可以归纳如下: 1) 如果我们使用是...SpringApplication 静态 run 方法,那么,这个方法里面首先要创建一个 SpringApplication 对象实例,然后调用这个创建好 SpringApplication 实例方法...2) SpringApplication 实例初始化完成并且完成设置后,就开始执行 run 方法逻辑了,方法执行伊始,首先遍历执行所有通过 SpringFactoriesLoader 可以查找到并加载...SpringBoot 启动类 首先进入 run 方法 run 方法中去创建了一个 SpringApplication 实例,在该构造方法内,我们可以发现其调用了一个初始化 initialize 方法

    31510

    SpringBoot谁都会用,可你知道启动原理吗?

    ---- 二、深入探索SpringApplication执行流程 SpringApplicationrun方法实现是我们本次旅程主要线路,该方法主要流程大体可以归纳如下: 1) 如果我们使用是...SpringApplication静态run方法,那么,这个方法里面首先要创建一个SpringApplication对象实例,然后调用这个创建好SpringApplication实例方法。...2) SpringApplication实例初始化完成并且完成设置后,就开始执行run方法逻辑了,方法执行伊始,首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载SpringApplicationRunListener...SpringBoot启动类 首先进入run方法 ? run方法中去创建了一个SpringApplication实例,在该构造方法内,我们可以发现其调用了一个初始化initialize方法 ? ?...这里主要是为SpringApplication对象赋一些初值。构造函数执行完毕后,我们回到run方法 ?

    68460
    领券