SpringBoot常問面試題

參考文章

一、什麼是SpringBoot?

SpringBoot提供了一種快速使用Spring的方式,基於約定優於配置的思想,可以讓開發人員不必在配置與邏輯業務之間進行思維的切換,全身心的投入到邏輯業務的代碼編寫中,從而大大提高了開發的效率。

二、SpringBoot有哪些功能?

1) 自動配置

Spring Boot的自動配置是一個運行時(更準確地說,是應用程序啓動時)的過程,考慮了衆多因素,才決定Spring配置應該用哪個,不該用哪個。該過程是SpringBoot自動完成的。

2) 起步依賴

起步依賴本質上是一個Maven項目對象模型(Project Object Model,POM),定義了對其他庫的傳遞依賴,這些東西加在一起即支持某項功能。

簡單的說,起步依賴就是將具備某種功能的座標打包到一起,並提供一些默認的功能。

3) 輔助功能

提供了一些大型項目中常見的非功能性特性,如嵌入式服務器、安全、指標,健康檢測、外部配置等。

注意:Spring Boot 並不是對 Spring 功能上的增強,而是提供了一種快速使用 Spring 的方式。

三、SpringBoot起步依賴原理?

springboot中添加的依賴不需要版本(版本的控制)

我們的工程繼承了parent工程。parent的父工程spring-boot-dependencies,在這個工程中,定義了所有springboot使用的依賴的版本。

springboot不用自己添加依賴

基於maven的依賴傳遞,當前模塊添加的依賴如果也有依賴,會自動的添加到當前模塊。

在spring-boot-starter-parent中定義了各種技術的版本信息,組合了一套最優搭配的技術版本。
在各種starter中,定義了完成該功能需要的座標合集,其中大部分版本信息來自於父工程。
我們的工程繼承parent,引入starter後,通過依賴傳遞,就可以簡單方便獲得需要的jar包,並且不會存在版本衝突等問題。

四、SpringBoot自動配置的原理?

面試: springboot自動配置的原理

  1. 什麼是自動配置?

    手動配置: 掃描,讀取屬性文件,定義bean

    自動配置:SpringBoot自動完成 包掃描,讀取屬性文件,定義bean

  2. springboot自動配置的原理

    能夠自動配置,原因是我們在啓動類上加了 @SpringBootApplication

    1. 自動掃描

      @ComponentScan: 包掃描

      spring boot應用,自動的掃描啓動類所在的包,及其子包。

    2. 配置類

      讀取屬性文件,默認位置的配置文件。application.yml

      啓動類自身就是一個默認的配置類。@SpringBootConfiguration

    3. spring boot怎麼幫我們創建對象。【重點】掃描到系統模塊中的配置類

      1. 如何知道自帶的配置類在哪裏?

        Import註解讀取自動配置jar MATE-INF/spring.factories 文件中,配置的所有spring boot支持的自動配置類。

      2. 框架如何知道哪些對象該創建,哪些不該創建。

        Condition條件註解。只要在滿足當前對象創建的條件下,纔會自動創建。

      3. 框架自動創建對象的時候,如何得到我們配置的信息。DataSource

        添加依賴:

    在這裏插入圖片描述
    MATE-INF/spring.factories 中的配置類:
    在這裏插入圖片描述
    4. 在自動配置類中,加載屬性文件的同名Properties配置類
    在這裏插入圖片描述
    5. 進入配置類

    在這裏插入圖片描述
    其實默認的配置一般就是最優的配置,基本上除了連接信息,不做修改。

自動化配置總結

1、@SpringBootApplication組合註解,包含三個註解

在這裏插入圖片描述

  • @SpringBootConfiguration是組合的註解是對@Configuration封裝,也就是理解引導類其實也是一個配置類。

  • @ComponentScan是Spring註解作用是掃描包, 規則是 當前包及其子包所有的註解

2、@EnableAutoConfiguration 是實現SpringBoot自動化配置的註解,給我們內置了大量的約定配置。比如:Tomcat 端口8080, Redis localhost:6379

  • @AutoConfigurationPackage是自動化配置的包

  • @Import(AutoConfigurationImportSelector.class):初始化Bean並且存儲到IOC容器中,但是並不是所有的Bean對象都會被實例化。我們需要根據@ConditionalOnXXX來去初始化。

    通過AutoConfigurationImportSelector 的getAutoConfigurationEntry 獲取所有的自動化配置的全類名存到List集合中,等待被初始化。

在這裏插入圖片描述

3、以XXXAutoConfiigureation爲例
在這裏插入圖片描述

  • 判斷當前類是否生效,如果生效就開始實例化bean,找 @EnableConfigurationProperties(XXXProperties.class)裏面的默認的配置數據。 獲取成功之後就會去使用這些默認信息初始化Bean對象,存到IOC容器中。

五、spring boot應用啓動的流程?執行的步驟,流程? 運行main方法之後,框架做了什麼事?

  1. 初始化。創建SpringApplication對象。

    1. 判斷當前的主類,main方法的類,並設置主類。
    2. 判斷當前的應用是否是web應用。
    3. 獲取初始化類、監聽器類
      1. 讀取配置文件 MATE-INF,classpath
      2. 獲取初始化類,List集合
      3. 獲取監聽器類,List集合
  2. run方法。運行。

    1. 啓動計時器

    2. 執行監聽器(後續各個階段,根據監聽器的時機進行執行) 【重點】

    3. 準備環境 (加載我們自定義的屬性配置,配置文件application.yml,虛擬機參數,命令行參數,profile)【重點】

    4. 打印spring boot圖標。resource下粘貼自定義的banner.txt

    5. 創建context對象,並且通過自動配置實例化出所有的對象。【重點】

    6. 關閉計時器

    7. 執行runner,監聽器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章