![Springboot+SpringCloud實(shí)戰(zhàn)課件電子課件_第1頁(yè)](http://file4.renrendoc.com/view6/M03/1D/14/wKhkGWekdsaAOgbCAAQlGYVoV4I041.jpg)
![Springboot+SpringCloud實(shí)戰(zhàn)課件電子課件_第2頁(yè)](http://file4.renrendoc.com/view6/M03/1D/14/wKhkGWekdsaAOgbCAAQlGYVoV4I0412.jpg)
![Springboot+SpringCloud實(shí)戰(zhàn)課件電子課件_第3頁(yè)](http://file4.renrendoc.com/view6/M03/1D/14/wKhkGWekdsaAOgbCAAQlGYVoV4I0413.jpg)
![Springboot+SpringCloud實(shí)戰(zhàn)課件電子課件_第4頁(yè)](http://file4.renrendoc.com/view6/M03/1D/14/wKhkGWekdsaAOgbCAAQlGYVoV4I0414.jpg)
![Springboot+SpringCloud實(shí)戰(zhàn)課件電子課件_第5頁(yè)](http://file4.renrendoc.com/view6/M03/1D/14/wKhkGWekdsaAOgbCAAQlGYVoV4I0415.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章深入理解SpringBoot自動(dòng)裝配和啟動(dòng)類學(xué)習(xí)目標(biāo)理解SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程。理解SpringBoot項(xiàng)目啟動(dòng)過(guò)程。通過(guò)第2、3章,我們學(xué)習(xí)了使用SpringBoot進(jìn)行項(xiàng)目的快速開(kāi)發(fā)、配置、測(cè)試和部署等,從中可以發(fā)現(xiàn)SpringBoot項(xiàng)目啟動(dòng)和項(xiàng)目配置簡(jiǎn)單、便捷,它的這些特點(diǎn)離不開(kāi)其在啟動(dòng)過(guò)程中的自動(dòng)裝配。本章,主要介紹SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程和它的啟動(dòng)過(guò)程,幫助讀者深入理解并體會(huì)SpringBoot的編程思想。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程12SpringBoot項(xiàng)目啟動(dòng)過(guò)程SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程SpringBoot的自動(dòng)裝配是“拆箱即用”的基礎(chǔ),也是微服務(wù)化的前提。下面通過(guò)閱讀源碼來(lái)了解自動(dòng)裝配是如何實(shí)現(xiàn)的。我們?cè)诰帉?xiě)SpringBoot項(xiàng)目時(shí),啟動(dòng)類上有一個(gè)@SpringBootApplication注解。我們查看項(xiàng)目demo的啟動(dòng)類,如程序清單4-1所示。然后,我們按住“Ctrl”鍵,單擊此注解查看它的源碼,如程序清單4-2所示,可知此注解位于autoconfigure包下。回顧1.3節(jié),我們可以知道spring-boot-autoconfigure是SpringBoot的核心模塊之一,它的作用便是實(shí)現(xiàn)SpringBoot的自動(dòng)裝配功能。按住“Ctrl”鍵并單擊包名“org.springframework.boot.autoconfigure”,可查看autoconfigure包,如圖4-1所示。通過(guò)此包可查看autoconfigure的結(jié)構(gòu)和源碼,后續(xù)內(nèi)容提到的META-INF均位于此包。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程@SpringBootApplication包含@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。@ComponentScan默認(rèn)掃描的是與該類同級(jí)的類或同級(jí)的包下所有的類。通過(guò)源碼得知@SpringBootConfiguration是一個(gè)@Configuration,它的源碼如程序清單4-3所示。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程由此我們可以推斷出@SpringBootApplication等同于@Configuration加@ComponentScan加@EnableAutoConfiguration。一旦加上@EnableAutoConfiguration注解,就會(huì)開(kāi)啟自動(dòng)裝配功能,SpringBoot會(huì)在classpath下找到所有配置的Bean進(jìn)行裝配。當(dāng)裝配Bean時(shí),會(huì)根據(jù)若干個(gè)定制規(guī)則來(lái)進(jìn)行初始化。@EnableAutoConfiguration源碼如程序清單4-4所示。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程我們留意到它上面的注解@Import導(dǎo)入的類是AutoConfigurationImportSelector,這個(gè)類是用于導(dǎo)入自動(dòng)配置的選擇器,通過(guò)查看它的源碼得知它有一個(gè)selectImports方法,如程序清單4-5所示。該方法調(diào)用了getAutoConfigurationEntry方法,查看此方法的源碼,如程序清單4-6所示。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程在getAutoConfigurationEntry方法中,
首先判斷是否裝配,
然后從META-INF/spring-autoconfigure-perties中讀取元數(shù)據(jù)與元數(shù)據(jù)的相關(guān)屬性,接著調(diào)用getCandidateConfigurations方法,其源碼如程序清單4-7所示。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程getCandidateConfigurations方法中,SpringFactoriesLoader類調(diào)用了loadFactoryNames方法,而此方法又調(diào)用了loadSpringFactories方法,如程序清單4-8所示。查看loadSpringFactories方法的源碼,如程序清單4-9所示,可得知SpringFactoriesLoader會(huì)讀取META-INF/spring.factories中EnableAutoConfiguration下的自動(dòng)配置類到容器中。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程然后,通過(guò)META-INF/spring.factories中的AutoConfigurationImportFilter排除和過(guò)濾導(dǎo)入的自動(dòng)配置類,最后用META-INF/spring.factories中的AutoConfigurationImportListener執(zhí)行AutoConfigurationImportEvent事件,幫我們進(jìn)行自動(dòng)配置工作。進(jìn)入autoconfigure包,查看META-INF/spring.factories,如圖4-2所示?!?AutoConfigure”下是要導(dǎo)入容器的自動(dòng)配置類。“#AutoConfigurationImportFilters”下是用來(lái)排除和過(guò)濾導(dǎo)入的自動(dòng)配置類?!?AutoConfigurationImportListeners”下是用來(lái)監(jiān)聽(tīng)配置類導(dǎo)入的監(jiān)聽(tīng)器。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程我們以第一個(gè)自動(dòng)配置類SpringApplicationAdminJmxAutoConfiguration為例解釋自動(dòng)配置原理。按住“Ctrl”鍵并單擊該類,可查看它的源碼,如程序清單4-10所示。其中,@CondationalOnMissionBean注解的作用是判斷是否注入Bean,例如,當(dāng)我們手動(dòng)配置了此類的Bean時(shí)它便不注入自動(dòng)配置的Bean,因此它是覆蓋自動(dòng)配置的關(guān)鍵。只要在Maven中導(dǎo)入相關(guān)依賴,在spring.factories中將對(duì)應(yīng)的自動(dòng)配置類注入工廠,SpringBoot就可以取得配置類的屬性,從而在YAML或properties中進(jìn)行設(shè)置。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程綜上所述,我們知道由于SpringBoot的啟動(dòng)類上使用了@SpringBootApplication注解,而該注解包含@EnableAutoConfiguration注解。@EnableAutoConfiguration便是開(kāi)啟自動(dòng)配置的注解,它導(dǎo)入了@EnableAutoConfigurationImportSelector注解,該注解的內(nèi)部通過(guò)SpringFactoriesLoader.loadSpringFactories讀取META-INF/spring.factories文件進(jìn)行自動(dòng)配置工作。SpringBoot項(xiàng)目自動(dòng)裝配過(guò)程12SpringBoot項(xiàng)目啟動(dòng)過(guò)程SpringBoot項(xiàng)目啟動(dòng)過(guò)程為了能夠直觀地查看SpringBoot項(xiàng)目的啟動(dòng)過(guò)程,我們采用debug模式。debug模式指調(diào)試模式,通過(guò)該模式我們可以手動(dòng)控制程序的執(zhí)行與暫停,方便查看程序的運(yùn)行過(guò)程。使用debug模式,需要先在demo的啟動(dòng)類中執(zhí)行run方法的語(yǔ)句上加一個(gè)斷點(diǎn),如圖4-4所示。然后,我們以debug模式啟動(dòng),單擊藍(lán)色向下箭頭,進(jìn)入run方法的方法體,如圖4-5所示??梢钥吹絩un方法新建了一個(gè)SpringApplication對(duì)象,我們可以單擊該對(duì)象查看它的構(gòu)造方法,如圖4-6所示。這里主要是為SpringApplication對(duì)象的屬性賦一些初值,如設(shè)置資源加載器初始化為空、設(shè)置應(yīng)用上下文初始化器、判斷Web應(yīng)用類型、判斷主入口類等。SpringBoot項(xiàng)目啟動(dòng)過(guò)程SpringBoot項(xiàng)目啟動(dòng)過(guò)程SpringBoot項(xiàng)目啟動(dòng)過(guò)程SpringBoot項(xiàng)目啟動(dòng)過(guò)程接著,執(zhí)行SpringApplication對(duì)象的run方法,如圖4-7和4-8所示。執(zhí)行步驟如下。SpringBoot項(xiàng)目啟動(dòng)過(guò)程SpringBoot項(xiàng)目啟動(dòng)過(guò)程①“stopWatch.start();”創(chuàng)建并啟動(dòng)計(jì)時(shí)監(jiān)控類,這個(gè)類主要記錄任務(wù)的執(zhí)行時(shí)間。②“this.configureHeadlessProperty();”配置headless屬性,headless屬性是在缺少顯示器
鍵盤(pán)或者鼠標(biāo)時(shí)的系統(tǒng)配置。③“l(fā)isteners.starting();”創(chuàng)建所有運(yùn)行監(jiān)聽(tīng)器并啟動(dòng)。④“newDefaultApplicationArguments(args);”初始化應(yīng)用參數(shù)。⑤“this.prepareEnvironment(listeners,applicationArguments);”根據(jù)運(yùn)行監(jiān)聽(tīng)器和參數(shù)準(zhǔn)備SpringBoot環(huán)境。⑥“context=this.createApplicationContext();”創(chuàng)建應(yīng)用上下文。SpringBoot項(xiàng)目啟動(dòng)過(guò)程⑦“BannerprintedBanner=this.printBanner(environment);”輸出Banner標(biāo)志。⑧“this.prepareContext(context,environment,listeners,applicationArguments,printedBanner);”準(zhǔn)備應(yīng)用上下文。⑨“this.refreshContext(context);”刷新應(yīng)用上下文,在這里真正加載Bean到容器中,包括自動(dòng)裝配。如果是Web容器,會(huì)在onRefresh方法中創(chuàng)建一個(gè)Server并啟動(dòng)。⑩“stopWatch.stop();”
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度中央廚房配送食堂服務(wù)采購(gòu)協(xié)議
- 2025年度智慧城市建設(shè)項(xiàng)目居間咨詢服務(wù)協(xié)議書(shū)
- 2025年度房地產(chǎn)項(xiàng)目宣傳視頻制作合同范本
- 南山打井合同范例
- 七貓簽約合同范本
- 環(huán)保設(shè)備居間合同編寫(xiě)技巧
- 2025年度農(nóng)藥行業(yè)知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年國(guó)際貿(mào)易代理合同范本
- 2025年度全新金融數(shù)據(jù)分析外包服務(wù)合同模板下載
- 煙花爆竹許可證申請(qǐng)書(shū)
- 中國(guó)氫內(nèi)燃機(jī)行業(yè)發(fā)展環(huán)境、市場(chǎng)運(yùn)行格局及前景研究報(bào)告-智研咨詢(2024版)
- 開(kāi)學(xué)季初三沖刺中考開(kāi)學(xué)第一課為夢(mèng)想加油課件
- 《自然保護(hù)區(qū)劃分》課件
- 2025年普通卷釘項(xiàng)目可行性研究報(bào)告
- 2025年人教版英語(yǔ)五年級(jí)下冊(cè)教學(xué)進(jìn)度安排表
- 2025年建筑施工春節(jié)節(jié)后復(fù)工復(fù)產(chǎn)工作專項(xiàng)方案
- 學(xué)校食堂餐廳管理者食堂安全考試題附答案
- 《商用車預(yù)見(jiàn)性巡航系統(tǒng)技術(shù)規(guī)范》
- 玻璃電動(dòng)平移門(mén)施工方案
- 春季安全開(kāi)學(xué)第一課
- 陜鼓集團(tuán)招聘筆試題目
評(píng)論
0/150
提交評(píng)論