一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

說說SpringBoot啟動流程吧

jf_ro2CN3Fa ? 來源:CSDN ? 2023-03-28 17:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一 面試提問

1.1 Spring Boot啟動流程

面試官:說說SpringBoot啟動流程吧

我 :

首先從main找到run()方法,在執(zhí)行run()方法之前new一個SpringApplication對象

進入run()方法,創(chuàng)建應用監(jiān)聽器SpringApplicationRunListeners開始監(jiān)聽

然后加載SpringBoot配置環(huán)境(ConfigurableEnvironment),然后把配置環(huán)境(Environment)加入監(jiān)聽對象中

然后加載應用上下文(ConfigurableApplicationContext),當做run方法的返回對象

最后創(chuàng)建Spring容器,refreshContext(context),實現(xiàn)starter自動化配置和bean的實例化等工作。

1.2 SpringBoot自動裝配

面試官:說說SpringBoot自動配置的原理

我: 通過@EnableAutoConfiguration注解在類路徑的META-INF/spring.factories文件中找到所有的對應配置類,然后將這些自動配置類加載到spring容器中。

二 知識點詳解

2.1 SpringBoot核心注解:

@SpringBootApplication注解是Spring Boot的核心注解,它其實是一個組合注解,包括三個注解

1、@Configuration: 被標注的類等于在Spring的XML配置文件中(applicationContext.xml),裝配所有bean事務,提供了一個Spring的上下文環(huán)境

2、@EnableAutoConfiguration: SpringBoot根據(jù)應用所聲明的依賴來對Spring框架進行自動配置,其中包括兩個重要注解:

@AutoConfigurationPackage:該注解上有一個@Import({Registrar.class})注解,其中Registrar類的作用是將啟動類所在的包下的所有子包組件掃描注入到spring容器中。

因此這就是為什么將controller、service等包放在啟動類的同級目錄下的原因

@Import({AutoConfigurationImportSelector.class}):其中AutoConfigurationImportSelector類中有一個getCandidateConfigurations()方法,這個方法通過SpringFactoriesLoader.loadFactoryNames()查找位于META-INF/spring.factories文件中的所有自動配置類并加載這些類。

47c39daa-cd36-11ed-bfe3-dac502259ad0.png

3、@ComponentScan: 組件掃描,自動掃描和裝配Bean,掃描SpringApplication的run方法中的ExammanagerApplication.class所在的包路徑下的文件,因此將啟動類(main)放在跟包路徑下。它去尋找?guī)в蠤Component注解的類,并為其創(chuàng)建bean。

2.2詳細啟動流程(結合源碼)

1.首先進入run()方法,run方法中new創(chuàng)建了一個SpringApplication實例

publicstaticConfigurableApplicationContextrun(Class[]primarySources,String[]args){
return(newSpringApplication(primarySources)).run(args);
}

2.在SpringApplication的構造方法里為SpringApplication對象賦一些初值。

47cb174c-cd36-11ed-bfe3-dac502259ad0.png

3.構造方法執(zhí)行完后,回到run()方法

47f4e96e-cd36-11ed-bfe3-dac502259ad0.png

該方法中實現(xiàn)了如下幾個關鍵步驟:

創(chuàng)建了應用的監(jiān)聽器SpringApplicationRunListeners并開始監(jiān)聽

加載SpringBoot配置環(huán)境(ConfigurableEnvironment),如果是通過web容器發(fā)布,會加載StandardEnvironment,其最終也是繼承了ConfigurableEnvironment

配置環(huán)境(Environment)加入到監(jiān)聽器對象中(SpringApplicationRunListeners)

創(chuàng)建run方法的返回對象:ConfigurableApplicationContext(應用配置上下文)

回到run方法內(nèi),prepareContext方法將listeners、environment、applicationArguments、banner等重要組件與上下文對象關聯(lián)

接下來的refreshContext(context)方法(初始化方法如下)將是實現(xiàn)spring-boot-starter-*(mybatis、redis等)自動化配置的關鍵,包括spring.factories的加載,bean的實例化等核心工作。

480b5492-cd36-11ed-bfe3-dac502259ad0.png

配置結束后,Springboot做了一些基本的收尾工作,返回了應用環(huán)境上下文?;仡櫿w流程,Springboot的啟動,主要創(chuàng)建了配置環(huán)境(environment)、事件監(jiān)聽(listeners)、應用上下文(applicationContext),并基于以上條件,在容器中開始實例化我們需要的Bean,至此,通過SpringBoot啟動的程序已經(jīng)構造完成。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • XML
    XML
    +關注

    關注

    0

    文章

    188

    瀏覽量

    33662
  • Web服務器
    +關注

    關注

    0

    文章

    138

    瀏覽量

    24798
  • 監(jiān)聽器

    關注

    0

    文章

    12

    瀏覽量

    14590
  • SpringBoot
    +關注

    關注

    0

    文章

    175

    瀏覽量

    359

原文標題:字節(jié):SpringBoot 啟動流程

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SpringBoot中的Druid介紹

    SpringBoot中Druid數(shù)據(jù)源配置
    發(fā)表于 05-07 09:21

    SpringBoot知識總結

    SpringBoot干貨學習總結
    發(fā)表于 08-01 10:40

    怎么學習SpringBoot

    SpringBoot學習之路(X5)- 整合JPA
    發(fā)表于 06-10 14:52

    怎樣去使用springboot

    怎樣去使用springboot呢?學習springboot需要懂得哪些?
    發(fā)表于 10-25 07:13

    SpringBoot嵌入式Servlet容器啟動原理是什么

    SpringBoot嵌入式Servlet容器啟動原理思維導圖
    發(fā)表于 12-20 07:26

    SpringBoot應用啟動運行run方法

    什么時候創(chuàng)建嵌入式的Servlet容器工廠?什么時候獲取嵌入式的Servlet容器并啟動Tomcat;獲取嵌入式的Servlet容器工廠:1)、SpringBoot應用啟動運行run方法2
    發(fā)表于 12-20 06:16

    嵌入式Servlet容器啟動原理

    SpringBoot源碼學習系列之嵌入式Servlet容器啟動原理SpringBoot的自動配置就是SpringBoot的精髓所在,對于Spring
    發(fā)表于 12-22 07:23

    Springboot是如何獲取自定義異常并進行返回的

    源碼剖析Springboot是如何獲取自定義異常并進行返回的。來吧!第一步:肯定是在Springboot啟動的過程中進行的異常處理初始化,于是就找到了handlerExceptionResolver類
    發(fā)表于 03-22 14:15

    基于ARM的Bootloader啟動流程研究

    基于ARM的Bootloader啟動流程研究
    發(fā)表于 10-30 16:22 ?10次下載
    基于ARM的Bootloader<b class='flag-5'>啟動</b><b class='flag-5'>流程</b>研究

    SpringBoot如何實現(xiàn)啟動過程中執(zhí)行代碼

    目前開發(fā)的SpringBoot項目在啟動的時候需要預加載一些資源。而如何實現(xiàn)啟動過程中執(zhí)行代碼,或啟動成功后執(zhí)行,是有很多種方式可以選擇,我們可以在static代碼塊中實現(xiàn),也可以在構
    的頭像 發(fā)表于 06-20 17:32 ?1667次閱讀

    什么是 SpringBoot

    本文從為什么要有 `SpringBoot`,以及 `SpringBoot` 到底方便在哪里開始入手,逐步分析了 `SpringBoot` 自動裝配的原理,最后手寫了一個簡單的 `start` 組件,通過實戰(zhàn)來體會了 `
    的頭像 發(fā)表于 04-07 11:28 ?1711次閱讀
    什么是 <b class='flag-5'>SpringBoot</b>?

    SpringBoot的核心注解1

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達到零配置
    的頭像 發(fā)表于 04-07 14:34 ?920次閱讀
    <b class='flag-5'>SpringBoot</b>的核心注解1

    SpringBoot的核心注解2

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達到零配置
    的頭像 發(fā)表于 04-07 14:34 ?2183次閱讀
    <b class='flag-5'>SpringBoot</b>的核心注解2

    使用springboot完成流程的業(yè)務功能

    圖 使用springboot開發(fā)流程使用的接口完成流程的業(yè)務功能 基于 Spring Boot + MyBatis Plus + Vue Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC
    的頭像 發(fā)表于 05-15 17:40 ?1171次閱讀
    使用<b class='flag-5'>springboot</b>完成<b class='flag-5'>流程</b>的業(yè)務功能

    springboot啟動流程

    。 Spring Boot 的啟動流程可以分為以下幾個步驟:初始化啟動環(huán)境、加載自動配置類、創(chuàng)建 Spring 上下文、啟動嵌入式服務器。 初始化
    的頭像 發(fā)表于 11-22 16:04 ?873次閱讀