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