這篇文章主要為大家展示了“Spring-boot原理及spring-boot-starter的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Spring-boot原理及spring-boot-starter的示例分析”這篇文章吧。
"熱情、務(wù)實(shí)、專業(yè)、創(chuàng)新”我們不忘初心,砥礪前行,實(shí)在做人,認(rèn)真做事,始終如一的專注企業(yè)互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)。高端網(wǎng)站設(shè)計(jì)本著讓客戶滿意的目標(biāo),幫助企業(yè)通過互聯(lián)網(wǎng)創(chuàng)造價(jià)值.成都創(chuàng)新互聯(lián)公司全體員工將通過不懈努力,力爭(zhēng)成為客戶在信息化領(lǐng)域中值得長(zhǎng)期信賴的合作伙伴。
Spring-boot自出現(xiàn)后,到現(xiàn)在火的很,大家貌似都在用,連招聘里面也要求會(huì)這個(gè)。但是說實(shí)話,spring-boot無(wú)外乎想實(shí)現(xiàn)一種可插拔的編程方式,說是簡(jiǎn)化配置,其實(shí)并沒有減少多少,只不過把配置落到代碼里面,通過各種annotation來(lái)標(biāo)示了。
作為個(gè)人其實(shí)不太愿意團(tuán)隊(duì)用spring-boot這種層層封裝的方式,各種jar鋪天蓋地,最終大家都被綁架了,自己底層的能力不一定有什么提高。
spring-boot的starter又是個(gè)什么鬼?
一句話,spring-boot的starter是一個(gè)通過maven完成自包含并通過annotation配置使得可被spring上下文發(fā)現(xiàn)并實(shí)例化的一個(gè)可插拔的組件或服務(wù)。
spring-boot有兩種starter
一種是內(nèi)部已經(jīng)支持的,一種是第三方的。
內(nèi)部支持starter:
其通過@ConditionalOnClass來(lái)實(shí)決定是否例化(ConditionalOnClass是指當(dāng)在classpath發(fā)現(xiàn)需要的依賴的類時(shí)實(shí)例化),想要啟動(dòng)這個(gè)服務(wù),只要要配置上對(duì)應(yīng)的starter,這個(gè)starter就能把所需要的jar給關(guān)聯(lián)上。
類似于我們對(duì)log的使用,默認(rèn)使用slf4j這個(gè)api接口,提供一個(gè)鉤子,classpath里面誰(shuí)實(shí)現(xiàn)了這個(gè)機(jī)構(gòu),誰(shuí)就掛到這個(gè)鉤子上成為log具體實(shí)現(xiàn),其中l(wèi)og4j就是一個(gè)實(shí)現(xiàn)。
通過spring的如下maven配置即可看見里面已經(jīng)通過dependencyManagement(這個(gè)時(shí)maven的依賴管理,不用的時(shí)候不會(huì)加載)給你配置好了所有內(nèi)置starter。只需要用的時(shí)候把對(duì)應(yīng)的starter依賴配置上就行了。
jpg org.springframework.boot jpgspring-boot-starter < jpg/dependency>
所有的starter其實(shí)都是要通過代碼配置被上下文發(fā)現(xiàn)的,可以在spring-boot-autoconfigure-xxx.jar
去看,如下:。
內(nèi)置的tomcat,jetty也在里面:
具體代碼:
通過ConditionalOnClass
只要發(fā)現(xiàn)了tomcat這個(gè)類(配置了spring-boot-starter-web的maven依賴后就會(huì)會(huì)有),就會(huì)啟動(dòng)tomcat的服務(wù)。
第三方starter:
比如mybatis等。
原理是一樣的,就是在你已經(jīng)實(shí)現(xiàn)的服務(wù)代碼之上封裝一層配置代碼就行,看看mybitis的,這是mybatis-spring-boot-starter的依賴。
jpg org.mybatis.spring.boot jpgmybatis-spring-boot-starter jpg1.3.0 jpg
這個(gè)依賴是一個(gè)pom,點(diǎn)進(jìn)去可以看見自包含的依賴關(guān)系,其中一個(gè)就是mybatis的autoConfigure,通過@bean等annotation完成對(duì)mybatis的實(shí)例化配置,如下:
具體代碼:
基于這個(gè)機(jī)制,我們自己也可以實(shí)現(xiàn)一個(gè)
本次實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)操作組件,類似于mybatis,只不過只實(shí)現(xiàn)了簡(jiǎn)單的查詢服務(wù)。
整個(gè)示例有兩個(gè)工程:
一個(gè)實(shí)現(xiàn)我們自己的starter(取名叫spring-boot-mydao-starter),最后會(huì)打成ar包,并install到本地maven本地廠庫(kù)里。
另外一個(gè)工程用于測(cè)試,最終會(huì)依賴spring-boot-mydao-starter整個(gè)組件,并調(diào)用里面的查詢服務(wù)去測(cè)試。
工程
具體類如下:
1、創(chuàng)建spring-boot-mydao-starter工程,添加相關(guān)依賴配置
我們實(shí)現(xiàn)的這個(gè)組件僅僅依賴于MySQL的驅(qū)動(dòng)以及spring-boot的上下文環(huán)境。其中mysql驅(qū)動(dòng)用的spring-boot-starter-parent里面配置好的,這里直接用即可,maven配置如下:
2、實(shí)現(xiàn)以下幾個(gè)類:
Mydao:封裝數(shù)據(jù)庫(kù)的連接和查詢服務(wù),和spring沒有任何關(guān)系。
MyDaoAutoConfiguration:提供MyDao的配置用于啟動(dòng)時(shí)被spring上下文發(fā)現(xiàn)并解析。
DbProperties:完成對(duì)數(shù)據(jù)庫(kù)配置參數(shù)文件的讀?。╠b.properties,當(dāng)然spring-boot也支持其他格式的配置文件,個(gè)人還是喜歡傳統(tǒng)樣式)。
其中Mydao:
MyDaoAutoConfiguration(將配置參數(shù)對(duì)象傳給Mydao并配置Mydao實(shí)例):
Spring在啟動(dòng)時(shí)會(huì)通過@Bean實(shí)例化Mydao并將其放入ConfigurableApplicationContext容器中。
配置文件類DbProperties:
自動(dòng)讀取classpath下的db.properties的配置文件,并實(shí)例化成類對(duì)象。配置文件需要在測(cè)試的工程(test-spring-boot-mydao-starter)里提供。
配置文件db.properties
以上就是真?zhèn)€starter的類容。下面描述如何使用這個(gè)starter。
新建測(cè)試工程test-spring-boot-mydao-starter
(起啥名都行)。配置上對(duì)我們的starter的依賴:
因?yàn)閟tarter里面已經(jīng)依賴了spring-boot的上下文,所以這里就不用配置了。
然后就是測(cè)試:
我們用mysql自帶的數(shù)據(jù)庫(kù)里面的user表做測(cè)試。以下是測(cè)試類,需要注入starter里面的mydao:
然后就是啟動(dòng)測(cè)試:
也可以用spring的junit來(lái)測(cè)試。
以上是“Spring-boot原理及spring-boot-starter的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!