SpringBoot自動配置原理

image.png

官方解釋Springboot:我們對Spring平臺和第三方庫持固執(zhí)己見的觀點(diǎn)奠旺,因此您可以以最小的麻煩開始使用枫虏。大多數(shù)Spring Boot應(yīng)用程序需要最少的Spring配置晦嵌。

為何springboot可以如此便攜竖般,則來源于springboot的自動配置身诺,接下來講解原理。如集成redis來說聪全。

從啟動類@SpringBootApplication入手


image.png

而此注解下的@EnableAutoConfiguration注解則是自動配置注解。


image.png

通過注解再點(diǎn)擊


image.png

發(fā)現(xiàn)有一個select選擇器
image.png

而此選擇器最終會有一個configuration數(shù)組被返回田藐。

而這個數(shù)組則是通過掃描一個spring.factory來獲取的
通過下面代碼發(fā)現(xiàn):

 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

//最后追溯到這里

image.png

結(jié)論:springboot自動配置是尋找項(xiàng)目下的spring.factories的文件來實(shí)現(xiàn)自動配置

現(xiàn)在荔烧,我們找一個redis的factories來看看。
image.png

點(diǎn)進(jìn)此類查看

@Configuration(     //申明配置類
    proxyBeanMethods = false
)
//判斷有無RedisOperations這個類
@ConditionalOnClass({RedisOperations.class})
//配置這個類的參數(shù)在RedisProperties.class查找
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
    public RedisAutoConfiguration() {

通過作者代碼注釋汽久,我們可以總結(jié):
此類的注解:
1: 申明是一個配置類
2:判斷是否存在RedisOperations 鹤竭,存在則開始自動注入
3: 自動配置的參數(shù)在RedisProperties.class中查找

點(diǎn)擊 RedisProperties進(jìn)入

image.png

@ConfigurationProperties判斷配置文件有無spring.redis這個前綴。有的話則繼續(xù)查找參數(shù)注入景醇。如:spring.redis.port

所以:當(dāng)我們在集成redis的時候臀稚,只需要導(dǎo)入redis的jar包,并在application.yml下配置了spring.redis.下的參數(shù)(如:spring.redis.port 指定端口)三痰。
1:那么springboot會掃描項(xiàng)目是否導(dǎo)入了redis的jar包吧寺,則就是剛才的(判斷有無RedisOperations這個類)
2:springboot則會去application.yml查找是否添加了spring.redis開頭的配置。有則在初始化redis的時候?qū)⑴渲眉虞d進(jìn)去散劫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稚机,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子获搏,更是在濱河造成了極大的恐慌赖条,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纬乍,居然都是意外死亡碱茁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門仿贬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纽竣,“玉大人,你說我怎么就攤上這事茧泪◎寻保” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵调炬,是天一觀的道長语盈。 經(jīng)常有香客問我,道長缰泡,這世上最難降的妖魔是什么刀荒? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮棘钞,結(jié)果婚禮上缠借,老公的妹妹穿的比我還像新娘。我一直安慰自己宜猜,他們只是感情好泼返,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姨拥,像睡著了一般绅喉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叫乌,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天柴罐,我揣著相機(jī)與錄音,去河邊找鬼憨奸。 笑死革屠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的排宰。 我是一名探鬼主播似芝,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼板甘!你這毒婦竟也來了党瓮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盐类,失蹤者是張志新(化名)和其女友劉穎寞奸,沒想到半個月后痕寓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝇闭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硬毕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呻引。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吐咳,靈堂內(nèi)的尸體忽然破棺而出逻悠,到底是詐尸還是另有隱情,我是刑警寧澤韭脊,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布童谒,位于F島的核電站,受9級特大地震影響沪羔,放射性物質(zhì)發(fā)生泄漏饥伊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一蔫饰、第九天 我趴在偏房一處隱蔽的房頂上張望琅豆。 院中可真熱鬧,春花似錦篓吁、人聲如沸茫因。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冻押。三九已至,卻和暖如春盛嘿,著一層夾襖步出監(jiān)牢的瞬間洛巢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工孩擂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狼渊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓类垦,卻偏偏與公主長得像狈邑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚤认,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354