1. 程式人生 > >帶著萌新看springboot原始碼11(springboot啟動原理 原始碼上)

帶著萌新看springboot原始碼11(springboot啟動原理 原始碼上)

 

  通過前面這麼多講解,springboot原理應該也大概有個輪廓了,一些基本的配置,從客戶端url到controller(配置一些要用的元件,servlet三大元件,處理器對映器,攔截器,檢視解析器這些都說過了),然後通過Dao和資料庫打交道(配置資料來源、Druid監控都說了,其實我後面要寫的就是springboot和mybatis、springdata jpa的整合運用了),順便還說了一下spring中ioc容器的建立原理。

  今天就來一點更好玩的東西,大家還記得最開始的那個主配置類吧(就是有main方法的那個)。對了,ioc容器建立還有不瞭解的出門左轉,可以看我前面幾次寫的文章。

  溫馨提醒:這次原理涉及到ioc容器建立原理以及監聽器原理,我會跳過,因為前幾篇說過了,只說springboot有關的;而且不會使用除錯的小夥伴要先學會除錯哦~

  隨便建立一個springboot應用(要包括web模組)

 

  首先,我們就在這裡打個斷點

 

  除錯,run方法裡面可以看到還是啥事沒做,繼續呼叫run方法,step into進入

 

  可以看到,先根據主配置類建立一個spring應用(SpringApplication),然後呼叫run方法

  

  我們看看是怎麼建立spring應用的

  

  那我們來看看這兩個類似的方法做了一些什麼

  

  是累路徑下所有的jar包下的META-INF/spring.factories檔案,我只是舉個例子,還有很多個這樣的xxxInitializer

 

  同理,那兩個類似的的方法下面一個,就是載入所有類路徑下META-INF/spring.factories,鍵為ApplicationListener的所有類,然後儲存起來。

  到這裡。spring應用就創建出來了,無非是載入所有的ApplicationContextInitializer對應的xxxInitializer   和  ApplicationRunListener對應的監聽器,都儲存起來

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

  下面就開始執行run方法,看run方法裡面是怎麼執行的

 

  主要來看看這七個步驟是幹了什麼

第一步

  

  拿到所有監聽器,建立物件,然後儲存起來,再看第一步的start()方法,有關監聽器的原理在我的spring ioc原理我就說了(這裡的所有監聽器,在之前已經載入好了,都存起來了)

 

第二步

  

  後面的就是監聽器的原理了,都一樣(貼一下監聽器接口裡面的方法)

 

第三步(建立ioc容器)

  

 

第四步

  每個具體的xxxApplicationContextInitializer類的initialize()方法都不一樣,可以自己去看看,估計肯定是設定一些引數,往ioc容器裡匯入一些元件

第五步(重新整理容器,具體的我之前spring ioc原始碼那裡詳細的講解了,這裡就略過)

 

  記住哦,這裡的獲取ioc容器由於在上面已經建立過了,所以會直接從上面獲取的

 

  先到這裡,下一節繼續說一下後面一點內容