spring-boot 啟動(dòng)

  • 1、實(shí)例化/初始化 springAppliction 構(gòu)造函數(shù)處理了幾個(gè)事

    • 持有啟動(dòng)方法傳遞的class對(duì)象
    • 是否是web類(lèi)型,還是都不是
    • 初始化spring.factories配置的 ApplicationContextInitializer對(duì)象①
    • 初始化spring.factories配置的 ApplicationListener對(duì)象②
    • 從調(diào)用棧里查找main方法的類(lèi)對(duì)象.
  • 2、運(yùn)行

    • 配置awt headless模式,聲明沒(méi)有圖像設(shè)備等.
    • 初始化spring.factories和輸入?yún)?shù)指定的 SpringApplicationRunListener對(duì)象, 并啟動(dòng)監(jiān)聽(tīng).
    • 觸發(fā)所有的SpringApplicationRunListener的starting方法->發(fā)出ApplicationStartingEvent事件③
    • 初始化環(huán)境environment
    • 根據(jù)環(huán)境創(chuàng)建environment
      • 觸發(fā)所有的SpringApplicationRunListener的environmentPrepared方法->發(fā)出ApplicationEnvironmentPreparedEvent事件③
    • 實(shí)例化/初始化ApplictionContext, 會(huì)判斷是否是web環(huán)境, 創(chuàng)建對(duì)應(yīng)的applictionContext
    • 初始化spring.factories配置的 SpringBootExceptionReporter對(duì)象, 該對(duì)象會(huì)同時(shí)加載spring.factories配置的FailureAnalyzer類(lèi)對(duì)象。SpringBootExceptionReporter用于程序啟動(dòng)時(shí)異常捕獲,并輸出成易于查看的格式.
    • 準(zhǔn)備ApplictionContext
      • 觸發(fā)所有ApplicationContextInitializer對(duì)象的initialize方法
      • 觸發(fā)SpringApplicationRunListener的監(jiān)聽(tīng),觸發(fā)contextPrepared方法 ->發(fā)出ApplicationContextInitializedEvent事件③
      • 根據(jù)啟動(dòng)方法的class對(duì)象加載資源
      • 觸發(fā)SpringApplicationRunListener的監(jiān)聽(tīng),觸發(fā)contextLoaded方法->發(fā)出ApplicationPreparedEvent事件③
  • 刷新ApplictionContext, 委托給spring最原始的refresh方法

    • 觸發(fā)SpringApplicationRunListener的監(jiān)聽(tīng),觸發(fā)started方法->發(fā)出ApplicationStartedEvent事件③
  • 觸發(fā)ApplicationRunner, CommandLineRunner實(shí)現(xiàn)類(lèi)的run方法

  • 觸發(fā)SpringApplicationRunListener的監(jiān)聽(tīng),觸發(fā)running方法->發(fā)出ApplicationReadyEvent事件③

方法運(yùn)行結(jié)束,程序退出

① 可以實(shí)現(xiàn)自己的ApplicationContextInitializer, 在springApplication前執(zhí)行.
② 可以監(jiān)聽(tīng)啟動(dòng)過(guò)程發(fā)生的事件, 如ConfigFileApplicationListener監(jiān)聽(tīng)ApplicationEnvironmentPreparedEvent事件,處理EnvironmentPostProcessor,可以自定義自己的配置文件加載等.
③ 可以監(jiān)聽(tīng)事件,在啟動(dòng)的不通階段插入自定義的處理.

總結(jié):

spring-boot的啟動(dòng)擴(kuò)展的ApplicationContext,在ApplicationContext初始化/刷新前后做了自定義處理。也方便開(kāi)發(fā)人員在流程中自定義插入自己的實(shí)現(xiàn).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容