SpringApplication的run方法不会执行两次。该方法是Spring Boot应用程序的入口点,用于启动应用程序并执行必要的初始化和配置。当调用run方法时,它会创建一个Spring应用程序上下文,并执行一系列的步骤,包括加载配置、初始化Bean、启动服务器等。在整个过程中,run方法只会被执行一次。
具体来说,SpringApplication的run方法会执行以下步骤:
- 创建一个空的Spring应用程序上下文(ApplicationContext)。
- 设置应用程序的配置属性,如配置文件路径、激活的配置文件等。
- 执行SpringApplicationRunListeners的starting方法,通知所有注册的监听器应用程序即将启动。
- 根据配置属性加载应用程序的配置,包括配置文件、注解配置等。
- 执行SpringApplicationRunListeners的environmentPrepared方法,通知所有注册的监听器应用程序的环境已准备好。
- 创建并刷新应用程序上下文,加载所有的Bean定义并初始化Bean。
- 执行SpringApplicationRunListeners的contextPrepared方法,通知所有注册的监听器应用程序上下文已准备好。
- 调用ApplicationContext的refresh方法,完成Bean的初始化和依赖注入。
- 执行SpringApplicationRunListeners的contextLoaded方法,通知所有注册的监听器应用程序上下文已加载完成。
- 启动应用程序的服务器,如Tomcat、Jetty等。
- 执行SpringApplicationRunListeners的started方法,通知所有注册的监听器应用程序已启动。
- 执行应用程序的逻辑,处理请求和响应。
- 执行SpringApplicationRunListeners的running方法,通知所有注册的监听器应用程序正在运行。
- 当应用程序关闭时,执行一系列的清理操作,包括关闭服务器、销毁Bean等。
- 执行SpringApplicationRunListeners的stopped方法,通知所有注册的监听器应用程序已停止。
总结起来,SpringApplication的run方法只会被执行一次,并且它是Spring Boot应用程序的入口点,负责启动应用程序并执行必要的初始化和配置。在整个过程中,SpringApplication会创建应用程序上下文、加载配置、初始化Bean、启动服务器等,但不会执行两次。