<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      springboot的啟動流程

      一文徹底弄懂Spring Boot的啟動過程 

      一,Spring Boot啟動過程

      1. 啟動入口

      Spring Boot 應用的啟動入口通常是一個包含 @SpringBootApplication 注解的主類,并調用 SpringApplication.run() 方法。@SpringBootApplication 是一個復合注解,包含了 @Configuration@EnableAutoConfiguration@ComponentScan,從而開啟了自動配置和組件掃描。

      源碼路徑在 SpringApplication 類的 run() 方法:

      public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
          return new SpringApplication(primarySource).run(args);
      }

       

      這個入口主要做了以下幾件事情:

      1. 創建 SpringApplication 實例:初始化 Spring Boot 環境。
      2. 初始化環境和監聽器:設置啟動的 Environment,并且添加 ApplicationListener 監聽器。
      3. 準備和刷新 Spring 上下文:通過 prepareContextrefreshContext 方法進行上下文環境的準備和刷新。

      2. 創建 SpringApplication 實例

      SpringApplication 的構造方法中,Spring Boot 解析應用的啟動模式(例如是 Web 應用、Servlet 應用或是普通應用),并初始化應用的上下文類型。Spring Boot 的不同上下文類型包括 AnnotationConfigApplicationContext(非 Web 應用)和 AnnotationConfigServletWebServerApplicationContext(Web 應用)。

      3. 初始化 Environment 和監聽器

      接下來,Spring Boot 會初始化 ConfigurableEnvironment,這個環境中包含了系統的屬性、環境變量、配置文件等數據,作為后續加載 Bean 定義和初始化的基礎。

      同時,Spring Boot 也會初始化一系列的 ApplicationListener,用于監聽和處理應用啟動過程中的事件,比如 ApplicationEnvironmentPreparedEventApplicationPreparedEvent 等。

      4. 加載配置類并觸發自動配置

      Spring Boot 使用 @EnableAutoConfiguration 注解觸發自動配置,核心實現是在 AutoConfigurationImportSelector 中加載 META-INF/spring.factories 配置文件,文件中列出了許多自動配置類(如 DataSourceAutoConfigurationJpaRepositoriesAutoConfiguration 等),根據條件(例如某些 Bean 是否存在、某些屬性是否被配置等)加載相應的自動配置。

      5. 加載并注冊 Bean

      refreshContext() 方法中,Spring Boot 調用 refresh() 方法,這一步驟中完成了 BeanFactory 的初始化和 BeanPostProcessor 的注冊,并解析 @Component@Service@Repository 等注解標注的 Bean 定義,將它們注冊到 BeanFactory 中。

      在源碼層面,refresh() 方法中,invokeBeanFactoryPostProcessorsregisterBeanPostProcessors 這兩個方法是關鍵,分別用于執行所有 BeanFactoryPostProcessorBeanPostProcessor,確保 Bean 的生命周期正確管理。

      6. Web 環境中的嵌入式容器啟動

      在 Web 應用中,Spring Boot 會啟動嵌入式 Web 容器(如 Tomcat 或 Jetty)。Spring Boot 默認通過 ServletWebServerApplicationContext 啟動內嵌的 Web 服務器。在 refresh() 的最后,會啟動嵌入式容器,將應用作為 Web 應用發布。

      7. 執行 ApplicationRunner 和 CommandLineRunner

      Spring Boot 啟動完成后,會掃描并執行所有實現了 ApplicationRunnerCommandLineRunner 接口的 Bean。它們可以用于在啟動后執行自定義邏輯。

      8. 發布應用啟動完成事件

      最后,Spring Boot 發布 ApplicationReadyEvent 事件,通知所有監聽器應用已啟動完成。至此,Spring Boot 應用正式啟動完成,可以接收 HTTP 請求或執行其他任務。

      二、Spring Boot 啟動過程的架構設計

      在 Spring Boot 應用啟動的過程中,SpringApplication.run() 是最常用的啟動方式。通過這個方法,Spring Boot 為開發者屏蔽了大量復雜的初始化細節,我們只需提供主啟動類的入口和簡單的配置信息即可啟動整個應用。

      下面我們從源碼入手,分步驟分析 SpringApplication.run 進行的操作。

      1,SpringApplication.run() 的詳細流程

      SpringApplication.run 主要完成以下幾大步驟:

      1. 初始化 SpringApplication 實例

        該實例負責整個 Spring Boot 應用的啟動過程,通過判斷應用類型和設置環境變量為后續配置加載和應用上下文創建提供基礎。核心方法為 SpringApplication#prepareEnvironmentSpringApplication#createApplicationContext

      2. 創建應用上下文并刷新上下文

        SpringApplication 將根據應用類型來創建不同的 ApplicationContext(如 AnnotationConfigApplicationContextServletWebServerApplicationContext),并將所有 Bean 裝載到上下文中。

      3. 加載環境配置

        Spring Boot 會基于開發環境或生產環境加載不同的配置文件。核心是 ConfigFileApplicationListener 監聽配置事件,解析應用配置文件(application.propertiesapplication.yml)并裝配到應用上下文的 Environment 對象中。

      4. 啟動嵌入式容器

        如果是 Web 應用,Spring Boot 會啟動內嵌的服務器(如 Tomcat、Jetty 或 Undertow),并將 DispatcherServlet 注冊到服務器中。

       

      http://www.rzrgm.cn/lgx211/p/18535984

      posted @ 2025-09-15 19:43  shanxin1954  閱讀(49)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色欲综合久久中文字幕网| 日本高清不卡一区二区三| 午夜精品久久久久久| 国产精品中文字幕av| 国产稚嫩高中生呻吟激情在线视频| 好紧好滑好湿好爽免费视频| 2020国产欧洲精品网站| 中国女人内谢69xxxx| 亚洲国产精品色一区二区| 国产亚洲无日韩乱码| 中文有无人妻vs无码人妻激烈| 少妇被粗大的猛烈xx动态图| 亚洲大尺度视频在线播放| 免费看婬乱a欧美大片| 精品无码国产污污污免费| 国内熟妇人妻色在线视频| 亚洲国产精品嫩草影院久久| 棋牌| 国产精品视频第一第二区| 熟妇人妻无码中文字幕老熟妇| 国产精久久一区二区三区| 亚洲国产精品日韩av专区 | 亚洲乱女色熟一区二区三区| 毛片久久网站小视频| 国产91精品调教在线播放| 青青草成人免费自拍视频| CAOPORN免费视频国产| 国产精品免费看久久久| 武装少女在线观看高清完整版免费| 久久精品国产亚洲AV瑜伽| 宣武区| 日韩精品久久久肉伦网站| 国产成人啪精品视频免费APP | 少妇久久久被弄到高潮| 在线免费播放av观看| 国产亚洲一区二区三区四区| 精品国产美女福到在线不卡| 精品国产午夜福利在线观看| 四虎成人精品在永久免费| 嫩草研究院久久久精品| 亚洲人成网线在线播放VA|