上篇分析到了構造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怎麼拿類加載器。