springboot手寫一個(gè)自己的starter源碼
springboot的最強(qiáng)大的就是那些xxxAutoconfiguration,但是這些xxxAutoConfiguration又依賴那些starter,只有導(dǎo)入了這些場(chǎng)景啟動(dòng)器(starter),我們很多自動(dòng)配置類才能有用,并且還會(huì)新增一些功能,這次就來一起寫個(gè)簡(jiǎn)單的starter,來看看內(nèi)部到底是什么原理!
腦中大概有個(gè)印象:我們要用一個(gè)場(chǎng)景(比如web),直接導(dǎo)入下圖所示的依賴,但是在jar包里面去看這個(gè),你會(huì)發(fā)現(xiàn)里面只有一些基本的配置文件,什么類都沒有,就能夠想到這個(gè)一類就類似一個(gè)公司前臺(tái)的作用,通過這個(gè)公司前臺(tái),能夠聯(lián)系到公司內(nèi)部。
提前準(zhǔn)備:必須要有IDEA模塊化創(chuàng)建項(xiàng)目的基本操作,其他的隨意。
溫馨提醒:對(duì)于會(huì)用模塊的小伙伴,其實(shí)這里就是創(chuàng)建一個(gè)空項(xiàng)目,里面新建一個(gè)maven模塊,一個(gè)springboot模塊,springboot坐標(biāo)丟到maven的pom里面,再刪除一些多余的文件和依賴。
1.創(chuàng)建一個(gè)空的項(xiàng)目
然后就會(huì)跳出下圖這個(gè)頁(yè)面
上面相當(dāng)于前臺(tái)創(chuàng)建好了,下面開始創(chuàng)建真正的東西了,繼續(xù)創(chuàng)建模塊
兩個(gè)模塊創(chuàng)建好了之后,將這兩個(gè)模塊聯(lián)系起來(廢話,公司前臺(tái)肯定要有和上級(jí)的的通話方式?。?/p>
導(dǎo)入依賴之后就是這樣的
下一步就是在xxxautoconfiguration模塊,刪除一些沒用的東西和依賴,但是一定要保留一個(gè)最基本的starter
到這里,基本的準(zhǔn)備工作已經(jīng)完成(其實(shí)會(huì)用模塊式的直接能跳到這里來)
記?。簒xxstarter是前臺(tái),只是起到一個(gè)聯(lián)系作用(所以我們基本不配置這個(gè)),沒有什么其他功能,但是那個(gè)xxxautoconfiguration才是內(nèi)部有實(shí)權(quán)的老板
現(xiàn)在我們來做個(gè)老板出來,嘿嘿嘿!
下面看我的目錄結(jié)構(gòu)
從頭到尾看一下這些類里面有什么
第一個(gè):HelloProperties
第二個(gè):HelloWorld(記住,此時(shí)這個(gè)類和properties類還沒什么關(guān)系,必須要讓第三方傳入properties)
第三個(gè)HelloWorldAutoconfiguration
第四個(gè).spring.factories文件
最后一步:把這兩個(gè)安裝到maven本地倉(cāng)庫(kù)(記得,先是xxautoconfiguration,然后再starter)
另外一個(gè)starter一樣的操作
到此為止,一個(gè)簡(jiǎn)單的HelloWorid的starter就做出來了,我們只需要在我們的項(xiàng)目中導(dǎo)入那個(gè)starter(也就是前臺(tái)唯一的作用)的依賴,就可以了,看看我的starter的坐標(biāo)(還要記住,properties文件配置的@ConfigurationProperties(prefix = "wyq.hello"),這個(gè)prefix是可以在我們項(xiàng)目里面配置文件配置屬性的哦~~)
測(cè)試:
file------>new------->project,和以前用springboot一樣,隨便新建一個(gè)springboot應(yīng)用(記住,一定要選擇web模塊,不然自動(dòng)配置類作用,因?yàn)榕渲昧薂ConditionalOnWebApplication),導(dǎo)入上圖的依賴
隨便寫個(gè)controller測(cè)試一下
測(cè)試成功
到此結(jié)束,是不是覺得starter也就這樣啊,挺好玩的一個(gè)東西,而且最重要的是這種設(shè)計(jì)的模式有點(diǎn)厲害!通過這樣的設(shè)計(jì),居然能夠?qū)崿F(xiàn)自動(dòng)配置,果然是學(xué)海無涯啊,要不斷的學(xué)習(xí)別人前輩造就出來的成果,站在巨人的肩膀上學(xué)習(xí),我們才能走得更遠(yuǎn)啊!
相關(guān)文章
Java使用Redisson分布式鎖實(shí)現(xiàn)原理
Redisson分布式鎖 之前的基于注解的鎖有一種鎖是基本redis的分布式鎖,這篇文章主要介紹了Java使用Redisson分布式鎖實(shí)現(xiàn)原理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10SpringBoot?2.5.5整合輕量級(jí)的分布式日志標(biāo)記追蹤神器TLog的詳細(xì)過程
分布式追蹤系統(tǒng)是一個(gè)最終的解決方案,如果您的公司已經(jīng)上了分布式追蹤系統(tǒng),這篇文章主要介紹了SpringBoot?2.5.5整合輕量級(jí)的分布式日志標(biāo)記追蹤神器TLog,需要的朋友可以參考下2022-10-10java 畫pdf用itext調(diào)整表格寬度、自定義各個(gè)列寬的方法
這篇文章主要介紹了java 畫pdf用itext調(diào)整表格寬度、自定義各個(gè)列寬的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01