SpringBoot項目啓動過程源碼終於整體捋了一遍(三)

上篇分析到了構造SpringApplication的過程,爲了瞭解這個主源類primarySources,大致擼了一遍bean加載的過程。同時還遺留了一個問題,已經看到初始化SpringApplication的時候esourceLoader是爲了拿類加載器,那如果resourceLoader爲null怎麼辦呢,總不能不要類加載器吧,這篇帶着這個問題繼續看SpringApplication的初始化過程,還是先把構造方法先貼一下:

 繼續往下看:

其實很多時候從方法名就可以知道這個方法的作用,deduceFromClasspath()這個方法一看就知道是從類路徑中推斷出應用類型,可以看一下這個方法:

可以這裏分了三種應用類型 ,即reactive、none和service,判斷條件裏用了ClassUtils.isPresent()方法,至於這些常量參數其實就是一些類路徑,可以看一下:

擺這些類路徑是要幹嘛,一副要加載它們的樣子,那就繼續看看這個ClassUtils.isPresent()方法:

看來關鍵在於這個forName()方法,意思是這個方法能沒有異常的執行完那就返回true,那就看看這個forName():

 

 有時候大佬們寫的註釋得看一看,明明白白的告訴我們這個forName()方法可以替換Class.forName(),而且同樣返回類的實例,厲害了,那以後豈不是可以用ClassUtils.forName()來加載類。

到這裏就理清了是怎麼推斷應用類型了,說白了就是看哪些類可以被加載,再說白一點就是引入了哪些jar包。

本來想繼續往下寫的,但是接下來的內容值得專門一篇博,所以這篇就到這裏,依然總結一下:這篇就走了一行代碼,看了下初始化SpringApplication的過程中是怎麼推斷應用類型的,同時開頭的問題仍然遺留着,即:初始化SpringApplication的時候esourceLoader爲null怎麼拿類加載器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章