SpringBoot源碼分析(1)—啟動類

最近小編開發(fā)中使用SpringBoot,發(fā)現(xiàn)有許多基礎(chǔ)知識忘記了隘蝎,就邊復(fù)習(xí)基礎(chǔ)知識邊看一下源碼來增加記憶晒哄。小編還是菜鳥一個睁宰,寫這個也是方便記錄自己的理解肪获,如有錯誤,請各路大神指正柒傻。

package com.italkbb.sailing.broctrl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }

}

該類是程序的入口孝赫,根據(jù)自己的理解,寫了下該類的這幾句所代表的含義红符。

1青柄、Application是主類,運行這個主類main方法時预侯,程序會先初始化該主類致开。這時候的疑問(怎么初始化呢?什么叫初始化該類呢萎馅?做了什么呢双戳?)

當(dāng)程序主動使用這個Application類時,該類還未被加載到內(nèi)存中糜芳,則系統(tǒng)就會通過加載飒货、連接、初始化三個步驟來對該類初始化耍目。沒有意外的話膏斤,JVM將會完成這三個步驟徐绑,所以有時也把這三個步驟統(tǒng)稱為類加載或類初始化邪驮。

那第一步初始化Application類,而初始化的第一步又是類的加載和連接:會把該類的class文件讀入內(nèi)存傲茄,并為之創(chuàng)建一個java.lang.Class對象毅访,這一步其實被細(xì)稱為Application類的加載。也就是在下面方法里為啥可以使用Application.class來獲取這個類的Class對象盘榨,因為第一步類加載的時候喻粹,就生成啦。

這時候還沒有進(jìn)行Applicaiton類的初始化草巡,剛加載和連接完成守呜,隨后會檢查該類的直接父類有沒有被初始化,如果沒有山憨,會先初始化其直接父類查乒。而所有類的基類都是Object類,所以會去初始化基類郁竟。其實在過程中玛迄,類加載器也會去加載所有JDK中的jar包的class文件。

把所有父類都初始化(包括加載棚亩、連接蓖议、初始化)完成了虏杰,再初始化(主要是類變量初始化,加載和連接在第一步已完成)Application勒虾,而該類沒有類變量纺阔,所以就往下繼續(xù)走。

2修然、遇到SpringApplication.run()方法州弟,在遇到之前,還沒有加載低零、連接婆翔、初始化該類(為方便,以下統(tǒng)稱為初始化)掏婶。這時候為什么會初始化SpringApplication呢啃奴,因為一個類別初始化(加載、連接雄妥、初始化)有幾個時機(jī):

  • 創(chuàng)建類的實例最蕾。為某個類創(chuàng)建實例的方式包括:使用new操作符來創(chuàng)建實例,通過反射來創(chuàng)建實例老厌,通過反序列化的方式來創(chuàng)建實例
  • 調(diào)用某個類的類方法(靜態(tài)方法)
  • 訪問某個類或接口的類變量瘟则,或為該類變量賦值。
  • 使用反射方式來強(qiáng)制創(chuàng)建某個類或接口對應(yīng)的java.lang.Class對象枝秤。例如代碼:Class.forName("Person")醋拧,如果系統(tǒng)還未初始化Person類,則這行代碼將會導(dǎo)致該Person類被初始化淀弹,并返回Person類對應(yīng)的java.lang.Class對象丹壕。
  • 初始化某個類的子類。當(dāng)初始化某個類的子類時薇溃,該子類的所有父類都會被初始化菌赖。
  • 直接使用java.exe命令來運行某個主類時,程序會先初始化該主類沐序。

所以SpringApplication.run()是屬于第二種琉用,調(diào)用類的類方法,所以這時候會初始化SpringApplication類策幼。SpringApplication類中的這些變量肯定會被初始化啦邑时。

image

3、SpringApplication.run(Application.class, args)中只傳遞了兩個參數(shù)垄惧,一個就是Application的Class對象刁愿,該Application的Class對象是在該類加載的時候JVM為其生成的。為什么要傳遞它呢到逊,因為一旦獲取某個類所對應(yīng)的Class對象铣口,程序就可以調(diào)用Class對象的方法來獲得該類對象和該類的各種信息了滤钱。

SpringApplication.run(Application.class, args)傳遞Application的Class對象,以方便獲取Application類上的各種信息脑题,比如@SpringBootApplication注解件缸,獲取到該注解后,通過注解的注解解析器APT叔遂,為擁有該注解的類執(zhí)行一些自定義的操作他炊。這里又涉及注解的基礎(chǔ)知識。

這一個啟動類已艰,這是精簡痊末,超神,這就是SpringBoot的啟動類哩掺。往下的操作凿叠,還在繼續(xù)學(xué)習(xí)中卵迂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跺涤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昂灵,更是在濱河造成了極大的恐慌舱禽,老刑警劉巖炒刁,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異誊稚,居然都是意外死亡翔始,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門片吊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绽昏,“玉大人,你說我怎么就攤上這事俏脊。” “怎么了肤晓?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵爷贫,是天一觀的道長。 經(jīng)常有香客問我补憾,道長漫萄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任盈匾,我火速辦了婚禮腾务,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘削饵。我一直安慰自己岩瘦,他們只是感情好未巫,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著启昧,像睡著了一般叙凡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上密末,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天握爷,我揣著相機(jī)與錄音,去河邊找鬼严里。 笑死新啼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刹碾。 我是一名探鬼主播师抄,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼教硫!你這毒婦竟也來了叨吮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤瞬矩,失蹤者是張志新(化名)和其女友劉穎茶鉴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體景用,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡涵叮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伞插。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片割粮。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖媚污,靈堂內(nèi)的尸體忽然破棺而出舀瓢,到底是詐尸還是另有隱情,我是刑警寧澤耗美,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布京髓,位于F島的核電站,受9級特大地震影響商架,放射性物質(zhì)發(fā)生泄漏堰怨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一蛇摸、第九天 我趴在偏房一處隱蔽的房頂上張望备图。 院中可真熱鬧,春花似錦、人聲如沸揽涮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绞吁。三九已至幢痘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間家破,已是汗流浹背颜说。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留汰聋,地道東北人门粪。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像烹困,于是被迫代替她去往敵國和親玄妈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容