SpringBoot的Starter工作原理介紹
本文是應一位讀者的要求而撰寫。先告訴大家,這個原理很好理解。
生產資料,優(yōu)先到位
生產資料就是用于正常生產工作所需要的一切東西。
從古代戰(zhàn)爭來講,那就是“兵馬未動,糧草先行”。所以糧草就是生產資料。
從我們碼農來講,正常開發(fā)所需要的都是生產資料,這里有一塊很重要的資料,就是所有依賴的第三方jar包。
我們不需要重復造輪子,也不需要從零開始,所以直接拿來就用,拿來的其實就是jar包。
jar包只是一些基礎代碼,而且很多原本和Spring或SpringBoot沒有關系,現(xiàn)在要和Spring或SpringBoot整合使用,就必須按Spring或SpringBoot的Style進行。
傳統(tǒng)的和Spring整合的方式
還以MyBatis和Spring整合為例,因為每個Java開發(fā)人員對它都非常熟悉。
要完成這個整合,需要三個方面的jar包:
一是Spring的jar包。
二是MyBatis的jar包。
三是整合時使用的jar包。
這三方面的jar包都需要自己手動一一引入。
引入Spring的jar包:

引入MyBatis的jar包:

引入整合的jar包:

還有一個問題,就是當引入的jar包足夠多時,jar包之間的版本號有時會有沖突,需要自己慢慢測試,頗為麻煩。
jar包導入之后,就該自己寫代碼進行Bean注冊了,因為Spring的Style就是Bean注冊。

主要包括四方面內容:
1、注冊SqlSessionFactory這個Bean
2、指定mybatis的mybatis-config.xml配置文件路徑
3、指定mybatis的mapper.xml映射文件的路徑
4、指定源碼包路徑并掃描所有@Mapper注解接口
這里面有兩個問題,不是十分友好:
1、jar包版本號問題,有時確實麻煩
2、注冊Bean的代碼幾乎都一樣,而且每次都要手動注冊
SpringBoot幫你解決
對于jar包的版本號問題,SpringBoot幫你搞定,它經過測試,把常用的依賴及其適合的版本號都通過依賴管理的方式包含在pom文件中。


注意,這里只是依賴管理,并不是引入依賴。如需使用的話,還需要引入,只不過不用再指定版本號了。
對于注冊Bean的問題,SpringBoot也幫你搞定,它把這些注冊代碼都已寫好,然后通過各種“條件注解”來進行自動配置,所以最終會不會被注冊,還要看運行時的“條件”。
這其實就是SpringBoot的自動配置了,具體可參考前兩篇文章。
Starter就是一個啟用入口
汽車造好之后,就只給我們留了一個一鍵啟動的按鍵,踩著剎車按一下就啟動了,至于按鍵背后做的事情,我們無需知道,只有這樣才可以大范圍推廣。
同理,Starter也是這樣一個東西,只要引入之后,并在application.yml文件中進行一些簡單的配置或根本無須配置,直接啟動后就可以用了。
Starter其實就是一個jar包,在pom中引入一個starter其實就是引入了一個jar包。
而且很多時候,這個starter對應的jar包是個空的,里面并沒有任何類和接口。

那這個空的jar包有何意義呢?它的意義就在于為了引入有意義的其它jar包,因為這些jar包都是基于Maven的,因此jar包的pom文件中包含了其它依賴。


我們可以看到這個MyBatis的Starter就引入了正好需要的四類jar包:
1、Spring或SpringBoot相關的jar包
2、MyBatis的jar包
3、MyBatis和Spring整合的jar包
4、自動配置(也就是自動注冊Bean)的jar包
這樣一來,要完成MyBatis和Spring整合的所有jar包都湊齊了。而且自動注冊Bean這些模板代碼也已經有了。
這里面也就自動配置jar包稍微特殊一點,它里面包含一些帶有“條件注解”的Bean注冊。所以這些代碼需要在SpringBoot中運行。
由于很多自動配置jar包都是第三方提供的,所以一定要告訴SpringBoot一聲,讓SpringBoot來執(zhí)行它,這樣才可以。
就像一鍵啟動按鈕一樣,你至少要按一下吧,不能通過意念控制的。
下面是MyBatis的自動配置jar包:

這個jar包里包含了一個特殊約定的文件,就是spring.factories,它位于jar包里的META-INF目錄下:


首先注釋已經告訴我們了,這是自動配置。
具體內容是一個key/value類型的內容,key是固定的,就是SpringBoot自動配置的注解EnableAutoConfiguration的全名。
value就是第三方提供的自動配置類MybatisAutoConfiguration的全名。
這其實就是一個掛接,通過這種方式,第三方提供的自動配置就可以被SpringBoot執(zhí)行了,然后Bean就會被注冊了。
總結一下:
Starter使用Maven規(guī)則引入所有需要的依賴jar包,和自動配置jar包。
自動配置jar包使用spring.factories文件把自己掛接到SpringBoot以便被執(zhí)行。
帶來的簡便:
原來所有的問題,現(xiàn)在都變?yōu)閮H僅在pom中引入一個starter而已。
—?【 THE END 】—本公眾號全部博文已整理成一個目錄,請在公眾號里回復「m」獲取!

震驚!ConcurrentHashMap里面也有死循環(huán),作者留下的“彩蛋”了解一下?

985 大學老師的工資并沒有很高,為什么大家都擠破頭想進高校?
3T技術資源大放送!包括但不限于:Java、C/C++,Linux,Python,大數(shù)據,人工智能等等。在公眾號內回復「1024」,即可免費獲取!!
評論
圖片
表情
