<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
概念
起步依賴本質上是一個Maven專案物件模型(Project Object Model,POM),定義了對其他庫的傳遞依賴,這些東西加在一起支援某一功能。
簡單的說,起步依賴就是將具備某種功能的座標打包到一起,並提供一些預設的功能
例子-搭建Web應用
Spring+SpringMVC
我們需要新增許多依賴,還要考慮到不同依賴之間存在版本衝突的問題,一般搭建一個Web專案時需要匯入以下依賴:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.3.RELEASE</version> </dependency>
SpringBoot
搭建Web專案只需要匯入一個起步依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
也就是隻需要匯入一個名為spring-boot-starter-web 的起步依賴即可,我們點 spring-boot-starter-web 進去可以看到,其實這個起步依賴整合了常用的 web 依賴。
概念
SpringBoot的自動設定是一個執行時(應用程式啟動時)的過程,根據設定,才決定Spring設定應該使用哪個,這個過程是Spring自動完成的。
分析
在SpringBoot中整合了一些常見的容器,或者說是元件,例如我們最常用的Tomcat伺服器,所以在做web專案時,不需要再另外部署到Tomcat上,可以直接執行,這就需要整個專案有一個入口,類似於普通java程式中的main方法(其實就是main方法),這個入口我們一般用一個單獨的類來表示,其中包含一個main方法,這個類通常稱之為SpringBoot的引導類,SpringBoot入門程式的引導類程式碼如下:
@SpringBootConfiguration 和 @ComponentScan 註解。前者實質為 @Configuration 註解,這個註解相比大家都接觸過,也就是起到宣告這個類為設定類的作用,而後者起到開啟自動掃描元件的作用。
這裡需要重點分析的是 @EnableAutoConfiguration 這個註解,這個註解的作用是開啟 Spring Boot 的自動設定功能,我們來分析一下它是如何開啟的,點選進去可以看到:
可以看到這個註解上邊又有兩個註解,@AutoConfigurationPackage和@Import,@AutoConfigurationPackage是用來管理自動設定類的,可以先不看,先看@Import,這個註解在Spring純註解設定當中也使用過,它的作用是匯入另外一個設定類,這裡匯入了一個叫做AutoConfigurationImportSelector的設定類,翻譯過來就是自動設定的匯入選擇器,進一步挖它的原始碼:
由於這個類內容較多,我們只關心它實現自動設定的步驟,所以我們根據內部呼叫關係一步一步找:
內容太多看不懂不要緊,我們只看關鍵部分,這是我們找到的關鍵方法,第一個方法字面意思就是“選擇匯入”,它的內部又呼叫了第二個關鍵方法,意為“獲取自動設定入口”,在這個getAutoConfigurationEntry()方法中可以明顯看到configurations這樣的關鍵字眼(通過下面的分析可以確定裡面裝的是一些設定類的全限定類名),而且它是一個字串型別的集合,它來自於getCandidateConfigurations()方法,所以我們在這個類中繼續往下找這個方法:
挖到這裡,可以看到它還在繼續呼叫其他類中的方法,這個時候要還想繼續往下挖可能就有一定難度了,但是在這個時候我們可以從下方的message中發現一點貓膩,裡面的META-INF/spring.factories好像看起來是某個路徑下的,那麼是那個路徑下呢,我們可以盲猜就是當前這個類相關的某個路徑,所以我們來到這個類的最上方看它的全限定包名:
我們可以根據這個包名在我們匯入的Libraies裡面去找這個包,然後真的找到了這麼一個組態檔:
這個組態檔裡面是一些全限定類名,而且每個類名都是以AutoConfiguration結尾的,這就基本可以確定上面那個configurations裡面對應的就是這些內容,然後繼續在裡面找我們認識且熟悉的:
前面提到的內建Tomcat就是在這個裡面進行設定的,我們通過這個全限定類名繼續找到這個類:
我們通過關鍵註解@EnableConfigurationProperties(ServerProperties.class)繼續往下挖,找到ServerProperties這個類:
可以看到這個類中定義了很多跟tomcat伺服器有關的屬性,如port埠、address地址等,上面有一個@ConfigurationProperties註解的屬性中有一個prefix = “server”,這個其實就是對應組態檔中的字首,那麼組態檔在哪呢,我們繼續回到spring.factories同級的目錄下,會發現如下的一個json檔案:
在這個.json檔案中,可以找到跟剛才相關的設定,也就是說,這個json檔案裡面的值,就是SpringBoot自動設定時幫我們設定的值,如果我們需要更改這些設定,只需要在我們的組態檔中設定一下就行了,就會覆蓋這裡的預設設定,而使用我們的自定義設定。
SpringBoot自動設定原理的分析,到這裡就基本結束了,雖然分析得比較淺薄,但是對於初學者想初步瞭解SpringBoot自動設定過程來說,這種深度恰到好處。等進一步熟練它的使用後,可以再進一步往底層挖掘,雖然有些太細節的東西,在專案開發中基本用不到,但是自己有一定了解的話,在使用過程中碰到問題可以有更清晰的思路去定位並解決。
到此這篇關於SpringBoot起步依賴和自動設定的文章就介紹到這了,更多相關SpringBoot起步依賴和自動設定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45