<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          spring-boot啟動過程源碼分析 · 貳

          共 1545字,需瀏覽 4分鐘

           ·

          2021-09-01 22:55

          前言

          昨天我們從源碼層面簡單分析了一下spring boot的啟動過程,由于時間倉促,加上內(nèi)容都是臨場發(fā)揮,因此整個過程還是有點混亂的,而且內(nèi)容是也有一點點的謬誤,為了讓昨天的內(nèi)容看起來不那么混亂,同時也為了糾正昨天的謬誤,我們今天先來做一點點補充,這樣也有利于我梳理后續(xù)內(nèi)容的思路。下面就讓我們直接開始吧。

          run方法源碼分析補充

          昨天晚上我說過今天要先畫一個時序圖,所以開始之前,我們先看下run方法的執(zhí)行過程時序圖(時序圖源碼有需要的小伙伴可以發(fā)私信,為了保證清晰度我這里放的是svg格式的):

          從上面這張時序圖中,我們很直觀地看出run方法的執(zhí)行過程。其中最關鍵的內(nèi)容有兩部分,一個是和監(jiān)聽器相關的操作,另一個是和應用容器相關的操作,從圖上我們也可以看出這一點,這兩個的內(nèi)容和操作都很多,而且基本上貫穿了整個run方法,所以下一步我們要分析的就是監(jiān)聽器和應用容器這兩塊的內(nèi)容,但是今天可能來不及分享了。

          糾正謬誤

          下面我們糾正昨天的一個謬誤,昨天我說這段代碼是創(chuàng)建spring工廠實例,這么說雖然沒有什么問題,但結合整段代碼的邏輯來說就是有問題的。

          exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporter.class,
               new Class[] 
          { ConfigurableApplicationContext.class }, context);

          這段代碼在這里的作用是構建SpringBootExceptionReporter的實例對象,構建的對象是在catch中用的,詳細查看源代碼的話,你會發(fā)現(xiàn)其實它是用來分析啟動過程中錯誤的。下面的這段代碼,各位小伙伴看著肯定不陌生,在啟動spring boot報錯的時候會經(jīng)常看到:

          說到這里,我們再補充點spring boot啟動異常處理的相關知識點。如果在啟動過程中發(fā)生異常,spring boot會調用handleRunFailure方法處理異常,其中一個核心參數(shù)就是我們前面創(chuàng)建的SpringBootExceptionReporter實例集合,在方法內(nèi)部主要進行了以下幾步操作:

          • 處理退出碼。這個退出碼是從異常中獲取到的,獲取到之后會注冊到SpringBootExceptionHandler中。
          • 調用監(jiān)聽器failed方法,推送ApplicationFailedEvent事件
          • 調用reportFailure,打印錯誤報告
          • 關閉context容器
          • 拋出異常信息

          方法源碼如下:

          好了,spring boot啟動主流程暫時就先分享這么多。

          總結

          經(jīng)過今天的梳理之后,我發(fā)現(xiàn)對于spring boot的啟動流程,整體感覺清晰了好多,特別是時序圖畫完之后。

          而且更重要的是,從圖上我們直接就能很直觀地看出整個啟動流程,看清楚啟動過程的各個節(jié)點以及相關的操作,這就特別有助于我們理解spring boot的啟動過程,另外從時序圖上,我們還可以直觀地看出啟動過程的關鍵點、核心點,這樣也有助于我們把握知識的重點,確定下一步的學習計劃。

          總之,我現(xiàn)在感覺畫圖確實是一個特別好的學習方式,比如畫腦圖、畫時序圖、流程圖等,這些圖表對于知識的梳理和總結都有著特別積極的效果,我是越來越喜歡這種方式了。

          - END -


          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品国产三级国芦专播精品人 | 亚洲高清中文视频 | 伊人91在线 | 日本欧美一级片 | 成人午夜激情视频 |