1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        spring-boot啟動(dòng)過(guò)程源碼分析 · 貳

        共 1545字,需瀏覽 4分鐘

         ·

        2021-09-01 22:55

        前言

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

        run方法源碼分析補(bǔ)充

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

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

        糾正謬誤

        下面我們糾正昨天的一個(gè)謬誤,昨天我說(shuō)這段代碼是創(chuàng)建spring工廠實(shí)例,這么說(shuō)雖然沒(méi)有什么問(wèn)題,但結(jié)合整段代碼的邏輯來(lái)說(shuō)就是有問(wèn)題的。

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

        這段代碼在這里的作用是構(gòu)建SpringBootExceptionReporter的實(shí)例對(duì)象,構(gòu)建的對(duì)象是在catch中用的,詳細(xì)查看源代碼的話,你會(huì)發(fā)現(xiàn)其實(shí)它是用來(lái)分析啟動(dòng)過(guò)程中錯(cuò)誤的。下面的這段代碼,各位小伙伴看著肯定不陌生,在啟動(dòng)spring boot報(bào)錯(cuò)的時(shí)候會(huì)經(jīng)??吹剑?/p>

        說(shuō)到這里,我們?cè)傺a(bǔ)充點(diǎn)spring boot啟動(dòng)異常處理的相關(guān)知識(shí)點(diǎn)。如果在啟動(dòng)過(guò)程中發(fā)生異常,spring boot會(huì)調(diào)用handleRunFailure方法處理異常,其中一個(gè)核心參數(shù)就是我們前面創(chuàng)建的SpringBootExceptionReporter實(shí)例集合,在方法內(nèi)部主要進(jìn)行了以下幾步操作:

        • 處理退出碼。這個(gè)退出碼是從異常中獲取到的,獲取到之后會(huì)注冊(cè)到SpringBootExceptionHandler中。
        • 調(diào)用監(jiān)聽(tīng)器failed方法,推送ApplicationFailedEvent事件
        • 調(diào)用reportFailure,打印錯(cuò)誤報(bào)告
        • 關(guān)閉context容器
        • 拋出異常信息

        方法源碼如下:

        好了,spring boot啟動(dòng)主流程暫時(shí)就先分享這么多。

        總結(jié)

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

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

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

        - END -


        瀏覽 32
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩久久久久久 | 久久久精品国产免费观看同学 | 啊灬啊灬啊灬快灬高潮了电影片段 | 182午夜福利 | 国产a网站 | 人妖炮机调教前列腺高潮 | 国产视频一二三 | 91香蕉在线观看视频在线播放 | 日本少妇小泬无套 | 成人视频在线观看免费 |