欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Boot面試必問之啟動流程知識點詳解

 更新時間:2022年06月29日 10:42:16   作者:iijik55  
SpringBoot是Spring開源組織下的子項目,是Spring組件一站式解決方案,主要是簡化了使用Spring的難度,簡省了繁重的配置,提供了各種啟動器,開發(fā)者能快速上手,這篇文章主要給大家介紹了關(guān)于Spring?Boot面試必問之啟動流程知識點的相關(guān)資料,需要的朋友可以參考下

一 面試提問

1.1 Spring Boot啟動流程

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

??

  1. 首先從main找到run()方法,在執(zhí)行run()方法之前new一個SpringApplication對象
  2. 進入run()方法,創(chuàng)建應用監(jiān)聽器SpringApplicationRunListeners開始監(jiān)聽
  3. 然后加載SpringBoot配置環(huán)境(ConfigurableEnvironment),然后把配置環(huán)境(Environment)加入監(jiān)聽對象中
  4. 然后加載應用上下文(ConfigurableApplicationContext),當做run方法的返回對象
  5. 最后創(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事務(wù),提供了一個Spring的上下文環(huán)境

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

  1. @AutoConfigurationPackage:該注解上有一個@Import({Registrar.class})注解,其中Registrar類的作用是將啟動類所在的包下的所有子包組件掃描注入到spring容器中。
    因此這就是為什么將controller、service等包放在啟動類的同級目錄下的原因
  2. @Import({AutoConfigurationImportSelector.class}):其中AutoConfigurationImportSelector類中有一個getCandidateConfigurations()方法,這個方法通過SpringFactoriesLoader.loadFactoryNames()查找位于META-INF/spring.factories文件中的所有自動配置類并加載這些類。

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

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

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

public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
        return (new SpringApplication(primarySources)).run(args);
    }

在SpringApplication的構(gòu)造方法里為SpringApplication對象賦一些初值。

構(gòu)造方法執(zhí)行完后,回到run()方法

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

  1. 創(chuàng)建了應用的監(jiān)聽器SpringApplicationRunListeners并開始監(jiān)聽
  2. 加載SpringBoot配置環(huán)境(ConfigurableEnvironment),如果是通過web容器發(fā)布,會加載StandardEnvironment,其最終也是繼承了ConfigurableEnvironment
  3. 配置環(huán)境(Environment)加入到監(jiān)聽器對象中(SpringApplicationRunListeners)
  4. 創(chuàng)建run方法的返回對象:ConfigurableApplicationContext(應用配置上下文)
  5. 回到run方法內(nèi),prepareContext方法將listeners、environment、applicationArguments、banner等重要組件與上下文對象關(guān)聯(lián)
  6. 接下來的refreshContext(context)方法(初始化方法如下)將是實現(xiàn)spring-boot-starter-*(mybatis、redis等)自動化配置的關(guān)鍵,包括spring.factories的加載,bean的實例化等核心工作。

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

總結(jié)

到此這篇關(guān)于Spring Boot面試必問之啟動流程的文章就介紹到這了,更多相關(guān)SpringBoot啟動流程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring聲明式事務(wù)解析

    spring聲明式事務(wù)解析

    這篇文章主要為大家詳細介紹了spring聲明式事務(wù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 高分面試分析jvm如何實現(xiàn)多態(tài)

    高分面試分析jvm如何實現(xiàn)多態(tài)

    這篇文章主要介紹了講解了在面試中jvm如何實現(xiàn)多態(tài),怎樣回答才能得到高分的問題分析,有需要的朋友可以借鑒參考下,祝大家早日升職加薪多多進步
    2022-01-01
  • Java servlet執(zhí)行流程代碼實例

    Java servlet執(zhí)行流程代碼實例

    這篇文章主要介紹了Java servlet執(zhí)行流程代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 舉例分析Python中設(shè)計模式之外觀模式的運用

    舉例分析Python中設(shè)計模式之外觀模式的運用

    這篇文章主要介紹了Python中設(shè)計模式之外觀模式的運用,外觀模式主張以分多模塊進行代碼管理而減少耦合,需要的朋友可以參考下
    2016-03-03
  • 淺析Java中為什么要設(shè)計包裝類

    淺析Java中為什么要設(shè)計包裝類

    我們知道Java是一個面相對象的編程語言,基本類型并不具有對象的性質(zhì),為了讓基本類型也具有對象的特征,就出現(xiàn)了包裝類型,它相當于將基本類型“包裝起來”,使得它具有了對象的性質(zhì),并且為其添加了屬性和方法,豐富了基本類型的操作
    2021-06-06
  • Windows+Apache+resin配置

    Windows+Apache+resin配置

    Windows+Apache+resin配置...
    2006-12-12
  • Linux中Java開發(fā)常用軟件安裝方法總結(jié)

    Linux中Java開發(fā)常用軟件安裝方法總結(jié)

    這篇文章主要介紹了Linux中Java開發(fā)常用軟件安裝方法總結(jié),需要的朋友可以參考下
    2020-02-02
  • SpringBoot接收與響應xml報文請求的實現(xiàn)

    SpringBoot接收與響應xml報文請求的實現(xiàn)

    我們在進行接口對接時,會出現(xiàn)報文形式的信息傳遞,這篇文章主要給大家介紹了關(guān)于SpringBoot接收與響應xml報文請求的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Java中通過Class類獲取Class對象的方法詳解

    Java中通過Class類獲取Class對象的方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中通過Class類獲取Class對象的方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • Java8 中的ParallelStream

    Java8 中的ParallelStream

    這篇文章主要介紹了Java8 中的并行流 ParallelStreams,Java8并行流ParallelStream和Stream的區(qū)別就是支持并行執(zhí)行,提高程序運行效率。下面就來看看文章內(nèi)容具體介紹吧
    2021-10-10

最新評論