與其明天開始,不如現在行動!
文章目錄
- 1 依賴管理機制
- 2 自動配置機制
- 2.1 初步理解
- 2.2 完整流程
- 💎總結
1 依賴管理機制
-
為什么導入
starter-web
后所有相關依賴都會導入進來?- 開發什么場景,導入什么場景啟動器
-spring-boot-starter-
- maven依賴傳遞原則,a-b-c:a就擁有c
- 導入一個場景啟動器,就會自動把整個場景的所有核心依賴全部導入進來
- 開發什么場景,導入什么場景啟動器
-
為什么版本號都不用寫?
-
每個boot項目都有一個父項目:
spring-boot-starter-parent
-
parent的父項目是:
spring-boot-dependencies
-
在里面版本仲裁中心就寫好了每個jar包的版本
-
要自定義版本號
- 直接在依賴下面聲明版本號
- 利用maven的就近原則
- 直接在當前項目使用
<properties>
標簽
- 直接在當前項目使用
<properties><mysql.version>8.0.31</mysql.version> </properties>
-
第三方jar包要自己聲明
-
2 自動配置機制
2.1 初步理解
- 自動配置的Tomcat、SpringMVC等
- 以前:要配置一堆的組件
- 現在:SpringBoot自動配置好這些組件,容器中有了什么組件,就具有什么功能
- 導入場景,容器中就會自動配置好這個場景的核心組件
- 默認的包掃描規則
- @SpringBootApplication注解的類就是主程序
- SpringBoot只會掃描主程序所在的包及其下面的子包:
com.wen.usercenter
及其子包
- 配置默認值
- 配置文件(如:application.properties)的所有配置項是和某個類的對象值進行一一綁定的
- 綁定了配置文件中每一項值的類:配置屬性類
- 按需加載自動配置
- 導入場景
spring-boot-starter-web
- 場景啟動器除了會導入相關依賴,還導入一個
spring-boot-starter
,是所有starter
的starter
,基礎核心starter spring-boot-starter
導入了一個包spring-boot-autoconfigure
。包里面都是各種場景的AutoConfiguration
自動配置類- 雖然全場景的自動配置都在
spring-boot-autoconfigure
這個包,但是不是全部開啟的。導入哪個場景就開啟哪個。
- 導入場景
總結:導入場景啟動器,觸發spring-boot-autoconfigure
這個包的自動配置生效,容器中就會具有相關的功能
2.2 完整流程
思考:
- SpringBoot怎么實現導入一個
starter
,寫一些簡單的配置,應用就能跑起來,我們無需關心整合?- 為什么Tomcat的端口號可以配置在
application.properties
中,并且Tomcat能啟動成功?- 導入場景后哪些自動配置能生效?
流程:
- 導入
stater
:導入了web開發場景- 場景啟動器導入了相關場景的所有依賴:
starter-json
、starter-tomcat
、springmvc
- 每個場景啟動器都引入了一個
spring-boot-starter
核心場景啟動器 - 核心場景啟動器引入了
spring-boot-autoconfigure
自動配置包,里面囊括了所有場景的所有配置 - 只要這個包下的所有類都能生效,那么相當于SpringBoot官方寫好的整合功能就生效了
- SpringBoot默認掃描不到
spring-boot-autoconfigure
下寫好的所有配置類
- 場景啟動器導入了相關場景的所有依賴:
- 主程序:
@SpringBootApplication
@SpringBootApplication
由三個注解組成:@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
- SpringBoot默認掃描不到
spring-boot-autoconfigure
下寫好的所有配置類 @EnableAutoConfiguration
:SpringBoot開啟自動配置的核心。- 是由
@Import({AutoConfigurationImportSelector.class})
提供功能:批量給容器中導入組件 - SpringBoot啟動會默認加載142個配置類
- 這142個配置類來自于
spring-boot-autoconfigure
包下META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件指定的所有類 - 項目啟動的時候利用
@Import
批量導入組件機制把autoconfigure
包下的142個xxxAutoConfiguration
類導入進來(自動配置類) - 按需生效:
- 雖然導入了142個自動配置類,但是并不是都能生效
- 每個自動配置類,都有條件注解
@ConditionOnXxx
,只有條件成立,才能生效
xxxAutoConfiguration
自動配置類- 給容器中使用@Bean放一堆組件
- 每個自動配置類都有可能由注解:
@EnableConfigurationProperties(ServerProperties.class)
,用來把配置文件中配的指定前綴的屬性值封裝到xxxProperties
屬性類中 - 以Tomcat為例,把服務器的所有配置都是以
server
開頭的。配置都封裝到屬性類中 - 給容器中放的所有組件的一些核心參數,都來自于
xxxProperties
。xxxProperties
都適合配置文件綁定的 - 只需要改配置文件的值,核心組件的底層參數都能修改
- 是由
- 寫業務,無需關心各種整合(底層這些整合都寫好了,而且也生效了)
核心流程:
- 導入
starter
,就會導入autoconfigure
包 autoconfigure
包里面有一個文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
,里面指定了所有啟動要加載的自動配置類@EnableAutoConfiguration
會自動的把上面文件里面寫的所有自動配置類都導入進來。xxxAutoConfiguration
給容器中導入很多組件,根據條件注解按需加載 ,組件都是從xxxProperties
中提取屬性值xxxProperties
又是和配置文件進行綁定
效果:導入starter
、修i該配置文件、就能修改底層行為
💎總結
本文中若是有出現的錯誤請在評論區或者私信指出,我再進行改正優化,如果文章對你有所幫助,請給博主一個寶貴的三連,感謝大家😘!!!