欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring-boot原理及spring-boot-starter實(shí)例和代碼

 更新時(shí)間:2019年06月14日 09:13:56   作者:crazy_joe  
spring-boot的starter是一個(gè)通過maven完成自包含并通過annotation配置使得可被spring上下文發(fā)現(xiàn)并實(shí)例化的一個(gè)可插拔的組件或服務(wù)。這篇文章主要介紹了Spring-boot原理及spring-boot-starter實(shí)例和代碼 ,需要的朋友可以參考下

Spring-boot自出現(xiàn)后,到現(xiàn)在火的很,大家貌似都在用,連招聘里面也要求會(huì)這個(gè)。但是說實(shí)話,spring-boot無外乎想實(shí)現(xiàn)一種可插拔的編程方式,說是簡化配置,其實(shí)并沒有減少多少,只不過把配置落到代碼里面,通過各種annotation來標(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來實(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里面誰實(shí)現(xiàn)了這個(gè)機(jī)構(gòu),誰就掛到這個(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依賴配置上就行了。

<dependency>
jpg <groupId>org.springframework.boot</groupId>
jpg <artifactId>spring-boot-starter</artifactId> <
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的依賴。

<dependency>
jpg<groupId>org.mybatis.spring.boot</groupId>
jpg<artifactId>mybatis-spring-boot-starter</artifactId>
jpg<version>1.3.0</version>
jpg</dependency>

這個(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è)簡單的數(shù)據(jù)庫操作組件,類似于mybatis,只不過只實(shí)現(xiàn)了簡單的查詢服務(wù)。

整個(gè)示例有兩個(gè)工程:

一個(gè)實(shí)現(xiàn)我們自己的starter(取名叫spring-boot-mydao-starter),最后會(huì)打成ar包,并install到本地maven本地廠庫里。

另外一個(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ù)庫的連接和查詢服務(wù),和spring沒有任何關(guān)系。

MyDaoAutoConfiguration:提供MyDao的配置用于啟動(dòng)時(shí)被spring上下文發(fā)現(xiàn)并解析。

DbProperties:完成對(duì)數(shù)據(jù)庫配置參數(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ù)庫里面的user表做測(cè)試。以下是測(cè)試類,需要注入starter里面的mydao:

然后就是啟動(dòng)測(cè)試:

也可以用spring的junit來測(cè)試。

總結(jié)

以上所述是小編給大家介紹的Spring-boot原理及spring-boot-starter實(shí)例和代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Java如何設(shè)置系統(tǒng)參數(shù)和運(yùn)行參數(shù)

    Java如何設(shè)置系統(tǒng)參數(shù)和運(yùn)行參數(shù)

    這篇文章主要介紹了Java如何設(shè)置系統(tǒng)參數(shù)和運(yùn)行參數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 多用多學(xué)之Java中的Set,List,Map詳解

    多用多學(xué)之Java中的Set,List,Map詳解

    下面小編就為大家?guī)硪黄嘤枚鄬W(xué)之Java中的Set,List,Map詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法

    java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法

    這篇文章主要介紹了java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法,實(shí)例分析了java基于SMTP服務(wù)發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Spring操作JdbcTemplate數(shù)據(jù)庫的方法學(xué)習(xí)

    Spring操作JdbcTemplate數(shù)據(jù)庫的方法學(xué)習(xí)

    這篇文章主要為大家介紹了Spring操作JdbcTemplate數(shù)據(jù)庫方法學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Java中的線程中斷機(jī)制和LockSupport詳解

    Java中的線程中斷機(jī)制和LockSupport詳解

    這篇文章主要介紹了Java中的線程中斷機(jī)制和LockSupport詳解,在Java中沒有辦法立即停止一條線程,然而停止線程卻顯得尤為重要,如取消一個(gè)耗時(shí)操作,因此,Java提供了一種用于停止線程的協(xié)商機(jī)制中斷,也即中斷標(biāo)識(shí)協(xié)商機(jī)制,需要的朋友可以參考下
    2023-09-09
  • java輸出鏤空金字塔實(shí)現(xiàn)案例

    java輸出鏤空金字塔實(shí)現(xiàn)案例

    小編最近接到領(lǐng)導(dǎo)安排,要求根據(jù)用戶輸入,打印出相應(yīng)層數(shù)的鏤空金字塔效果,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-09-09
  • 解決Properties屬性文件中的值有等號(hào)和換行的小問題

    解決Properties屬性文件中的值有等號(hào)和換行的小問題

    這篇文章主要介紹了解決Properties屬性文件中的值有等號(hào)有換行的小問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 基于Java實(shí)現(xiàn)的一層簡單人工神經(jīng)網(wǎng)絡(luò)算法示例

    基于Java實(shí)現(xiàn)的一層簡單人工神經(jīng)網(wǎng)絡(luò)算法示例

    這篇文章主要介紹了基于Java實(shí)現(xiàn)的一層簡單人工神經(jīng)網(wǎng)絡(luò)算法,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)人工神經(jīng)網(wǎng)絡(luò)的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • 手動(dòng)實(shí)現(xiàn)將本地jar添加到Maven倉庫

    手動(dòng)實(shí)現(xiàn)將本地jar添加到Maven倉庫

    這篇文章主要介紹了手動(dòng)實(shí)現(xiàn)將本地jar添加到Maven倉庫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • IDEA中的HTTP Client使用教程

    IDEA中的HTTP Client使用教程

    這篇文章主要介紹了IDEA中的HTTP Client使用教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論