參考文章
一、什麼是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自動配置的原理
-
什麼是自動配置?
手動配置: 掃描,讀取屬性文件,定義bean
自動配置:SpringBoot自動完成 包掃描,讀取屬性文件,定義bean
-
springboot自動配置的原理
能夠自動配置,原因是我們在啓動類上加了 @SpringBootApplication
-
自動掃描
@ComponentScan: 包掃描
spring boot應用,自動的掃描啓動類所在的包,及其子包。
-
配置類
讀取屬性文件,默認位置的配置文件。application.yml
啓動類自身就是一個默認的配置類。@SpringBootConfiguration
-
spring boot怎麼幫我們創建對象。【重點】掃描到系統模塊中的配置類
-
如何知道自帶的配置類在哪裏?
Import註解讀取自動配置jar MATE-INF/spring.factories 文件中,配置的所有spring boot支持的自動配置類。
-
框架如何知道哪些對象該創建,哪些不該創建。
Condition條件註解。只要在滿足當前對象創建的條件下,纔會自動創建。
-
框架自動創建對象的時候,如何得到我們配置的信息。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方法之後,框架做了什麼事?
-
初始化。創建SpringApplication對象。
- 判斷當前的主類,main方法的類,並設置主類。
- 判斷當前的應用是否是web應用。
- 獲取初始化類、監聽器類
- 讀取配置文件 MATE-INF,classpath
- 獲取初始化類,List集合
- 獲取監聽器類,List集合
-
run方法。運行。
-
啓動計時器
-
執行監聽器(後續各個階段,根據監聽器的時機進行執行) 【重點】
-
準備環境 (加載我們自定義的屬性配置,配置文件application.yml,虛擬機參數,命令行參數,profile)【重點】
-
打印spring boot圖標。resource下粘貼自定義的banner.txt
-
創建context對象,並且通過自動配置實例化出所有的對象。【重點】
-
關閉計時器
-
執行runner,監聽器
-