1. 程式人生 > >SpringBoot——run啟動流程

SpringBoot——run啟動流程

這裡寫圖片描述

SpringBoot_run()啟動流程

  1. SpringApplication例項初始化:
    a)、根據classpath裡面是否存在特徵類(org.springframework.web.context.ConfigurableWebApplicationCobtext)來決定建立為web應用使用ApplicationContext型別,還是標準Standalone應用使用的ApplicationContext型別。
    b)、使用SpringFactoriesLoader在classpath中查詢並載入所有可用的ApplicationContextInitiazier
    c)、使用SpringFactoriesLoader在classpath中查詢並載入所有可用的ApplicationListener


    d)、推斷並main方法的定義類

  2. SpringApplication例項初始化完成,遍歷SpringFactoriesLoader可以找到並載入的SpringApplicationRunListnner,呼叫他們的start()方法。

  3. 建立並配置當前SpringBoot應用將要使用的Envrioment(包括配置要使用的PropertySource以及Profile)

  4. 遍歷呼叫所有SpringApplicationRunListener的environmentPrepared()的方法——即通知【run監聽器SpringBoot應用的使用環境已經搭建完成】

  5. 建立對應型別的ApplicationContext,根據條件決定是否新增ShutdownHook,決定是否使用自定義的BeanNameGenerator、ResourceLoader。將之前準備好的Enviroment設定給建立好的ApplicationContext使用

  6. 完成建立ApplicationContext,通過SpringFactoriesLoader查詢並載入classpath中所有可用的ApplicationContextInitializer的Initialize()方法來對ApplicationContext進行進一步的處理

  7. 遍歷所有的SpringApplicationRunListenner的contextPrepared()方法,通知【run監聽器】ApplicationContext已經準備好了。

  8. 將之前通過@EnableAutoConfiguration獲取的所有配置以及其他形式的IOC容器配置載入到已經準備完畢的ApplicationContext

  9. 遍歷所有的SpringApplicationRunListener的contextLoaded()方法,通知【run監聽器和ApplicationContext裝填完畢】

  10. 呼叫ApplicationContext的refresh()——完成填充IOC容器

  11. 查詢當前ApplicationContext中是否註冊有CommandLineRunner,如果有,則遍歷執行它們。

  12. 遍歷執行SpringApplicationRunListener的finished()。
    ——啟動完畢

SpringApplicationRunListener

是SpringBoot應用的main()執行過程中接不同執行時點通知的【監聽者】。
這裡寫圖片描述

applicationListener

是Spring框架對【監聽者】模式的一種框架實現
SpringBoot中新增自定義的ApplicationListener的兩種方式
列表內容
這裡寫圖片描述

ApplicationContextInitialzer

這裡寫圖片描述

CommandLineRunner

這裡寫圖片描述
這裡寫圖片描述

相關推薦

SpringBoot——run啟動流程

SpringBoot_run()啟動流程 SpringApplication例項初始化: a)、根據classpath裡面是否存在特徵類(org.springframework.web.context.ConfigurableWebApplica

SpringBoot原始碼之SpringApplication.run啟動流程

SpringApplication初始化 設定初始化器列表:多個classpath*:META-INF/spring.factories中的屬性KEY為                        org.springframework.context.Appl

一、【徹底精通Spring Boot2原始碼】 SpringApplication.run() 啟動流程原始碼徹底剖析

       本文是對spring boot2 啟動整個流程進行原始碼解析,也是我發表springboot系列的第一篇文章,解析的過程我會一行一行解讀,網上很多的解析案例都是貼一段原始碼,然後說幾句概況性的語句,看了之後也是丈二和尚 摸不到頭腦,既然解析原

SpringBoot原理——啟動流程

每個SpringBoot程式都有一個主入口,也就是main方法,main裡面呼叫SpringApplication.run()啟動。 public ConfigurableApplicationContext run(String... args) { StopWatch

SpringBoot原始碼---啟動流程分析

 既然看到這篇文章了,那麼預設讀者已經很熟悉SpringBoot的使用的。  第一步,啟動一個SpringBoot應用: @ComponentScan(basePackages = {""}) @MapperScan("") @SpringBootApplication

SpringBoot應用啟動流程

> SpringBoot在微服務上應用是越來越多,同樣教程也比較多,但是我相信會有人跟我一樣的迷惑,它的載入過程是什麼樣的,要經過哪些類,然後又為什麼會能直接把應用打包成jar/war,然後就可以直接執行?本次使用的SpringBoot版本1.5.2。 # 從快速啟

SpringBoot啟動流程分析(二):SpringApplication的run方法

SpringBoot系列文章簡介 SpringBoot原始碼閱讀輔助篇:   Spring IoC容器與應用上下文的設計與實現 SpringBoot啟動流程原始碼分析: SpringBoot啟動流程分析(一):SpringApplication類初始化過程 SpringBoot啟動流程分析(二)

探索 SpringBoot (二) 啟動流程詳解(上)

探索 SpringBoot (二) 啟動流程詳解 文章目錄 探索 SpringBoot (二) 啟動流程詳解 1 緣起 2 環境配置 3 SpringApplication 準備階段 3.1 推斷 web ap

探索 SpringBoot (三) 啟動流程詳解(下)

探索 SpringBoot (三) 啟動流程詳解(下) 文章目錄 探索 SpringBoot (三) 啟動流程詳解(下) 4 SpringBoot 執行階段 4.1 Spring 應用執行監聽者的載入和執行 4.2

springboot啟動流程簡析

Spring Boot可以輕鬆建立獨立的,生產級的基於Spring的應用程式,而這隻需要很少的一些Spring配置。本文將從SpringBoot的啟動流程角度簡要的分析SpringBoot啟動過程中主要做了哪些事情。 說明: springboot 2.0.6.RELEASE SpringBoot啟動簡

SpringBoot啟動流程解析

寫在前面:        由於該系統是底層系統,以微服務形式對外暴露dubbo服務,所以本流程中SpringBoot不基於jetty或者tomcat等容器啟動方式釋出服務,而是以執行程式方式啟動來發布(參考下圖keepRunning方法)。        本文以除錯一個實

【深入SpringBoot 1.3.5 第一章】Boot應用的啟動流程

一、 快速建立一個Boot應用 使用maven <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri

springboot啟動流程分析(一)

以springboot 2.0.2.RELEASE版本為例 1.pom.xml引入依賴 <parent> <groupId>org.springframework.boot</groupId>

springboot啟動流程分析

分析springboot啟動流程 準備 最簡單的springboot專案程式碼,如下: @SpringBootApplication public class EurekaApplication { public static void main(Str

SpringBoot啟動流程簡析(三)

我們在上一節中說了SpringBoot的應用上下文的物件是AnnotationConfigEmbeddedWebApplicationContext,通過名字直譯就是註解配置的可嵌入的web應用上下文。我們對它先不做過多的介紹,在不遠的文章中我們就會對它進行一下

springboot啟動流程分析(二)

現在繼續看啟動過程的詳情,詳細描述下SpringApplication建構函式: 1.載入過程中的SpringApplication初始化如下: public SpringApplication(ResourceLoader resourceLoader

SpringBoot 啟動流程分析

用了Spring Boot有一段時間了,相比於Spring要理解它更難一些,在Spring boot中提出以下幾個疑問Spring Boot的架構是如何設計的,能很輕鬆的整合很多開源元件。Spring Boot中資源如何載入,事件如何管理,什麼時候可以對Spring Boot

SpringBoot(二)SpringBoot 啟動流程

SpringBoot 啟動流程: 首先我們看看一切的起源——SpringBoot啟動類: 執行main方法,然後呼叫SpringApplication.run()方法,這樣我們的專案就啟動了。是不是很神奇。 那麼我們來看看run方法,他到底為我們做了什麼,一起慢慢剝

97. SpringBoot-啟動流程分析第一篇

感謝網友給我的打賞,感謝Leonzhang的支付寶打賞,非常感謝!         《從零開始學Spring Boot》系列部落格已經介紹了不少篇幅了,有些博友說要介紹下理論的知識,確實本系列部落格都是偏實現類的文章,這節就介紹下理論的知識吧。我們就來一起看看Spring

SpringBoot 啟動流程原始碼筆記

springboot啟動一個專案程式碼例子如下 SpringApplication.run(xxxx.class, args); 跟蹤進去如下 public static ConfigurableApplicationContext run(Class<