




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章深入理解SpringBoot自動裝配和啟動類學習目標理解SpringBoot項目自動裝配過程。理解SpringBoot項目啟動過程。通過第2、3章,我們學習了使用SpringBoot進行項目的快速開發(fā)、配置、測試和部署等,從中可以發(fā)現(xiàn)SpringBoot項目啟動和項目配置簡單、便捷,它的這些特點離不開其在啟動過程中的自動裝配。本章,主要介紹SpringBoot項目自動裝配過程和它的啟動過程,幫助讀者深入理解并體會SpringBoot的編程思想。SpringBoot項目自動裝配過程12SpringBoot項目啟動過程SpringBoot項目自動裝配過程SpringBoot的自動裝配是“拆箱即用”的基礎(chǔ),也是微服務(wù)化的前提。下面通過閱讀源碼來了解自動裝配是如何實現(xiàn)的。我們在編寫SpringBoot項目時,啟動類上有一個@SpringBootApplication注解。我們查看項目demo的啟動類,如程序清單4-1所示。然后,我們按住“Ctrl”鍵,單擊此注解查看它的源碼,如程序清單4-2所示,可知此注解位于autoconfigure包下?;仡?.3節(jié),我們可以知道spring-boot-autoconfigure是SpringBoot的核心模塊之一,它的作用便是實現(xiàn)SpringBoot的自動裝配功能。按住“Ctrl”鍵并單擊包名“org.springframework.boot.autoconfigure”,可查看autoconfigure包,如圖4-1所示。通過此包可查看autoconfigure的結(jié)構(gòu)和源碼,后續(xù)內(nèi)容提到的META-INF均位于此包。SpringBoot項目自動裝配過程SpringBoot項目自動裝配過程@SpringBootApplication包含@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。@ComponentScan默認掃描的是與該類同級的類或同級的包下所有的類。通過源碼得知@SpringBootConfiguration是一個@Configuration,它的源碼如程序清單4-3所示。SpringBoot項目自動裝配過程由此我們可以推斷出@SpringBootApplication等同于@Configuration加@ComponentScan加@EnableAutoConfiguration。一旦加上@EnableAutoConfiguration注解,就會開啟自動裝配功能,SpringBoot會在classpath下找到所有配置的Bean進行裝配。當裝配Bean時,會根據(jù)若干個定制規(guī)則來進行初始化。@EnableAutoConfiguration源碼如程序清單4-4所示。SpringBoot項目自動裝配過程我們留意到它上面的注解@Import導(dǎo)入的類是AutoConfigurationImportSelector,這個類是用于導(dǎo)入自動配置的選擇器,通過查看它的源碼得知它有一個selectImports方法,如程序清單4-5所示。該方法調(diào)用了getAutoConfigurationEntry方法,查看此方法的源碼,如程序清單4-6所示。SpringBoot項目自動裝配過程SpringBoot項目自動裝配過程在getAutoConfigurationEntry方法中,
首先判斷是否裝配,
然后從META-INF/spring-autoconfigure-perties中讀取元數(shù)據(jù)與元數(shù)據(jù)的相關(guān)屬性,接著調(diào)用getCandidateConfigurations方法,其源碼如程序清單4-7所示。SpringBoot項目自動裝配過程getCandidateConfigurations方法中,SpringFactoriesLoader類調(diào)用了loadFactoryNames方法,而此方法又調(diào)用了loadSpringFactories方法,如程序清單4-8所示。查看loadSpringFactories方法的源碼,如程序清單4-9所示,可得知SpringFactoriesLoader會讀取META-INF/spring.factories中EnableAutoConfiguration下的自動配置類到容器中。SpringBoot項目自動裝配過程SpringBoot項目自動裝配過程然后,通過META-INF/spring.factories中的AutoConfigurationImportFilter排除和過濾導(dǎo)入的自動配置類,最后用META-INF/spring.factories中的AutoConfigurationImportListener執(zhí)行AutoConfigurationImportEvent事件,幫我們進行自動配置工作。進入autoconfigure包,查看META-INF/spring.factories,如圖4-2所示。“#AutoConfigure”下是要導(dǎo)入容器的自動配置類。“#AutoConfigurationImportFilters”下是用來排除和過濾導(dǎo)入的自動配置類?!?AutoConfigurationImportListeners”下是用來監(jiān)聽配置類導(dǎo)入的監(jiān)聽器。SpringBoot項目自動裝配過程我們以第一個自動配置類SpringApplicationAdminJmxAutoConfiguration為例解釋自動配置原理。按住“Ctrl”鍵并單擊該類,可查看它的源碼,如程序清單4-10所示。其中,@CondationalOnMissionBean注解的作用是判斷是否注入Bean,例如,當我們手動配置了此類的Bean時它便不注入自動配置的Bean,因此它是覆蓋自動配置的關(guān)鍵。只要在Maven中導(dǎo)入相關(guān)依賴,在spring.factories中將對應(yīng)的自動配置類注入工廠,SpringBoot就可以取得配置類的屬性,從而在YAML或properties中進行設(shè)置。SpringBoot項目自動裝配過程SpringBoot項目自動裝配過程綜上所述,我們知道由于SpringBoot的啟動類上使用了@SpringBootApplication注解,而該注解包含@EnableAutoConfiguration注解。@EnableAutoConfiguration便是開啟自動配置的注解,它導(dǎo)入了@EnableAutoConfigurationImportSelector注解,該注解的內(nèi)部通過SpringFactoriesLoader.loadSpringFactories讀取META-INF/spring.factories文件進行自動配置工作。SpringBoot項目自動裝配過程12SpringBoot項目啟動過程SpringBoot項目啟動過程為了能夠直觀地查看SpringBoot項目的啟動過程,我們采用debug模式。debug模式指調(diào)試模式,通過該模式我們可以手動控制程序的執(zhí)行與暫停,方便查看程序的運行過程。使用debug模式,需要先在demo的啟動類中執(zhí)行run方法的語句上加一個斷點,如圖4-4所示。然后,我們以debug模式啟動,單擊藍色向下箭頭,進入run方法的方法體,如圖4-5所示。可以看到run方法新建了一個SpringApplication對象,我們可以單擊該對象查看它的構(gòu)造方法,如圖4-6所示。這里主要是為SpringApplication對象的屬性賦一些初值,如設(shè)置資源加載器初始化為空、設(shè)置應(yīng)用上下文初始化器、判斷Web應(yīng)用類型、判斷主入口類等。SpringBoot項目啟動過程SpringBoot項目啟動過程SpringBoot項目啟動過程SpringBoot項目啟動過程接著,執(zhí)行SpringApplication對象的run方法,如圖4-7和4-8所示。執(zhí)行步驟如下。SpringBoot項目啟動過程SpringBoot項目啟動過程①“stopWatch.start();”創(chuàng)建并啟動計時監(jiān)控類,這個類主要記錄任務(wù)的執(zhí)行時間。②“this.configureHeadlessProperty();”配置headless屬性,headless屬性是在缺少顯示器
鍵盤或者鼠標時的系統(tǒng)配置。③“l(fā)isteners.starting();”創(chuàng)建所有運行監(jiān)聽器并啟動。④“newDefaultApplicationArguments(args);”初始化應(yīng)用參數(shù)。⑤“this.prepareEnvironment(listeners,applicationArguments);”根據(jù)運行監(jiān)聽器和參數(shù)準備SpringBoot環(huán)境。⑥“context=this.createApplicationContext();”創(chuàng)建應(yīng)用上下文。SpringBoot項目啟動過程⑦“BannerprintedBanner=this.printBanner(environment);”輸出Banner標志。⑧“this.prepareContext(context,environment,listeners,applicationArguments,printedBanner);”準備應(yīng)用上下文。⑨“this.refreshContext(context);”刷新應(yīng)用上下文,在這里真正加載Bean到容器中,包括自動裝配。如果是Web容器,會在onRefresh方法中創(chuàng)建一個Server并啟動。⑩“stopWatch.stop();”
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 哈爾濱職業(yè)技術(shù)學院《影視音樂音響》2023-2024學年第一學期期末試卷
- 2025年期貴州省畢節(jié)市重點中學初三畢業(yè)班3月質(zhì)檢物理試題含解析
- 海南省重點中學2025屆高考數(shù)學試題模擬試卷(8)數(shù)學試題含解析
- 壽險產(chǎn)品開發(fā)及設(shè)計基礎(chǔ)知識
- 手術(shù)室基礎(chǔ)無菌操作技術(shù)
- 陜西省衛(wèi)生健康系統(tǒng)事業(yè)單位招聘(臨床)歷年考試真題庫-含答案解析
- 介紹科學家課件
- 教育經(jīng)驗每天分享
- 護理燙傷不良事件
- 學習培訓匯報
- 2025太陽能光熱發(fā)電站熔融鹽儲熱系統(tǒng)技術(shù)
- JGJ33-2012 建筑機械使用安全技術(shù)規(guī)程
- DB3501_T 001-2021工業(yè)(產(chǎn)業(yè))園區(qū)綠色低碳建設(shè)導(dǎo)則(高清版)
- 郵差先生詳細解析(小說復(fù)習用).ppt課件
- 氯化銨安全技術(shù)說明書MSDS
- 河海大學材料力學第五章彎曲應(yīng)力
- 關(guān)于建立涉農(nóng)貸款專項統(tǒng)計制的通知銀發(fā)號
- 螺桿設(shè)計說明書
- 國家開放大學《理工英語3》章節(jié)測試參考答案
- 常用螺電批扭力選用對照表
- run@rate表格實例
評論
0/150
提交評論