springboot自動配置(默認配置)原理

自動配置本質(zhì)需要3個類

  • 服務(wù)類(功能類)

這也是starter的本質(zhì)目標,提供服務(wù)歹啼,但是化簡配置。注意,一定是需要配置的服務(wù)才有必要設(shè)置starter啦吧,然后在yml里面配置。比如web服務(wù),redis服務(wù),mongo服務(wù)等仍源。如果是是java的Date類這種,它直接能提供日期服務(wù)舔涎,但是不需要配置笼踩,所以這類都不是化簡的目標。

如果存在配置亡嫌,那么服務(wù)類內(nèi)部就一定就需要配置字段嚎于,這些字段里寫入的就是配置信息。其實開發(fā)者也可以new出來一個服務(wù)對象(當(dāng)然可以使用spring進行注入挟冠,省去new)于购,然后手動設(shè)置這些配置內(nèi)容也可以,實際開發(fā)中也有使用知染,比如prodb中配置rabbitmq的時候肋僧。但是更多時候我們想要通過yml配置,同時如果是最常用的配置希望框架幫自己配好控淡。這是我們的期待嫌吠,也是springboot幫我們做的。

提供的的服務(wù)對象逸寓,不一定是一個居兆,可能是多個,比如kafka的自動配置竹伸,就能提供KafkaTemplate泥栖、ProducerFactory、ConsumerFactory等多個bean勋篓,每個bean都能提供一部分功能(服務(wù))吧享。這些個bean都是在執(zhí)行類中配置的。

  • 配置類

類名一般都叫XXXProperties譬嚣。它的字段就是服務(wù)類的字段钢颂,一模一樣。然后它能夠和yml里面的配置項一一對應(yīng)起來拜银。配置項里的key就是字段名殊鞭。通過 @ConfigurationProperties注解綁定。

  • 執(zhí)行類

類名一般都叫XXXAutoConfiguration尼桶。 執(zhí)行配置操作操灿,實例化一個服務(wù)對象,放入spring的容器泵督,然后把pojo中的字段賦值給它趾盐,同時對大部分有必要的字段(配置項)設(shè)定默認值。這樣我們就可以使用yml配置某項服務(wù),然后在沒有配置的時候也按照默認配置使用服務(wù)救鲤。

這個類上有 @ConditionalOnClass@ConditionalOnProperty 注解久窟,說明服務(wù)文件和配置項都存在的時候就進行配置并實例化。換句話說就是當(dāng)你導(dǎo)入某個服務(wù)的jar包本缠,并且配置了它的內(nèi)容時候斥扛,你就能在代碼中使用了。如果@ConditionalOnProperty 注解的 matchIfMissing = true 進行了設(shè)置丹锹,那么就只需要導(dǎo)入jar包就能使用了犹赖。當(dāng)然,此時使用的配置是默認配置卷仑。你也可以修改成自己需要的配置。

能提供服務(wù)的類麸折,就是執(zhí)行類中函數(shù)返回的對象锡凝,被配置成了服務(wù)bean,函數(shù)內(nèi)部會使用配置類中的配置字段去set服務(wù)類內(nèi)部的字段垢啼。用戶會使用這些bean的時候直接注入即可窜锯。比如RedisTemplate。(也可能不直接用芭析,可能是被框架用锚扎,用戶感覺不到存在,但是也發(fā)揮作用了)

關(guān)于注解:

  • 服務(wù)類

不需要加注解的馁启。在這個自動配置的體系里驾孔,它只需要提供功能,被執(zhí)行類配置就行惯疙。

  • 配置類

@ConfigurationProperties(prefix = "hello")翠勉,用于說明在yml的配置文件中,本配置的前綴是什么霉颠。

  • 執(zhí)行類

個數(shù)不定对碌,一般會有如下幾個:

@EnableConfigurationProperties(HttpEncodingProperties.class),括號中的對象就是配置內(nèi)容類 蒿偎。

@ConditionalOnClass(CharacterEncodingFilter.class)朽们,括號內(nèi)的類存在的時候進行配置。如果classpath下有這個服務(wù)類诉位,那么就進行配置骑脱。

@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true),某個配置存在的時候才實例化這個關(guān)聯(lián)類不从。

最后的配置

最后要有一個spring.factories文件來配置有哪些內(nèi)容是自動注冊的惜姐;比如指定數(shù)據(jù)庫是自動注冊的,Date服務(wù)是不用管的

image.png

用starter pom,不光是引入了相關(guān)依賴的jar包歹袁,而且由于jar包的引入坷衍,引入了相關(guān)的類,觸發(fā)自動配置条舔。那么這些引入的內(nèi)容的配置都按照默認值配好了枫耳。

所有內(nèi)容的自動觸發(fā)設(shè)置在autoconfigure那個包里面,簡單的配置每個都有上面說的3個類孟抗。一些復(fù)雜的配置迁杨,可能有n個配置類,然后有m個執(zhí)行類凄硼,配置出x個功能類铅协。比如web的配置。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摊沉,一起剝皮案震驚了整個濱河市狐史,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌说墨,老刑警劉巖骏全,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尼斧,居然都是意外死亡姜贡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門棺棵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來楼咳,“玉大人,你說我怎么就攤上這事烛恤∨老穑” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵棒动,是天一觀的道長糙申。 經(jīng)常有香客問我,道長船惨,這世上最難降的妖魔是什么柜裸? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮粱锐,結(jié)果婚禮上疙挺,老公的妹妹穿的比我還像新娘。我一直安慰自己怜浅,他們只是感情好铐然,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布蔬崩。 她就那樣靜靜地躺著,像睡著了一般搀暑。 火紅的嫁衣襯著肌膚如雪沥阳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天自点,我揣著相機與錄音桐罕,去河邊找鬼。 笑死桂敛,一個胖子當(dāng)著我的面吹牛功炮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播术唬,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼薪伏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粗仓?” 一聲冷哼從身側(cè)響起毅该,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎潦牛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挡育,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡巴碗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了即寒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橡淆。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖母赵,靈堂內(nèi)的尸體忽然破棺而出逸爵,到底是詐尸還是另有隱情,我是刑警寧澤凹嘲,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布师倔,位于F島的核電站,受9級特大地震影響周蹭,放射性物質(zhì)發(fā)生泄漏趋艘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一凶朗、第九天 我趴在偏房一處隱蔽的房頂上張望瓷胧。 院中可真熱鬧,春花似錦棚愤、人聲如沸搓萧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘸洛。三九已至揍移,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間货矮,已是汗流浹背羊精。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囚玫,地道東北人喧锦。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像抓督,于是被迫代替她去往敵國和親燃少。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容