最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù),只要要配置上對應(yīng)的starter,這個(gè)starter就能把所需要的jar給關(guān)聯(lián)上。

類似于我們對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í)候把對應(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完成對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è)工程用于測試,最終會(huì)依賴spring-boot-mydao-starter整個(gè)組件,并調(diào)用里面的查詢服務(wù)去測試。​

工程

具體類如下:

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:完成對數(shù)據(jù)庫配置參數(shù)文件的讀?。╠b.properties,當(dāng)然spring-boot也支持其他格式的配置文件,個(gè)人還是喜歡傳統(tǒng)樣式)。

其中Mydao:

MyDaoAutoConfiguration(將配置參數(shù)對象傳給Mydao并配置Mydao實(shí)例):

Spring在啟動(dòng)時(shí)會(huì)通過@Bean實(shí)例化Mydao并將其放入ConfigurableApplicationContext容器中。


配置文件類DbProperties:

自動(dòng)讀取classpath下的db.properties的配置文件,并實(shí)例化成類對象。配置文件需要在測試的工程(test-spring-boot-mydao-starter)里提供。

配置文件db.properties

以上就是真?zhèn)€starter的類容。下面描述如何使用這個(gè)starter。

新建測試工程test-spring-boot-mydao-starter(起啥名都行)。配置上對我們的starter的依賴:

因?yàn)閟tarter里面已經(jīng)依賴了spring-boot的上下文,所以這里就不用配置了。

然后就是測試:

我們用mysql自帶的數(shù)據(jù)庫里面的user表做測試。以下是測試類,需要注入starter里面的mydao:

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

也可以用spring的junit來測試。

總結(jié)

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

相關(guān)文章

  • SpringBoot+JWT實(shí)現(xiàn)單點(diǎn)登錄完美解決方案

    SpringBoot+JWT實(shí)現(xiàn)單點(diǎn)登錄完美解決方案

    單點(diǎn)登錄是一種統(tǒng)一認(rèn)證和授權(quán)機(jī)制,指在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的系統(tǒng),不需要重新登錄驗(yàn)證,這篇文章主要介紹了SpringBoot+JWT實(shí)現(xiàn)單點(diǎn)登錄解決方案,需要的朋友可以參考下
    2023-07-07
  • springboot結(jié)合ehcache防止惡意刷新請求的實(shí)現(xiàn)

    springboot結(jié)合ehcache防止惡意刷新請求的實(shí)現(xiàn)

    這篇文章主要介紹了springboot結(jié)合ehcache防止惡意刷新請求的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • springboot查詢?nèi)坎块T流程分析

    springboot查詢?nèi)坎块T流程分析

    本文分析了在SpringBoot框架中前端如何請求DeptController的list()方法,并通過DeptService到DeptMapper接口查詢數(shù)據(jù)庫中的全部部門信息的流程,整個(gè)過程涉及前端到后端數(shù)據(jù)的獲取和返回,是SpringBoot應(yīng)用中常見的數(shù)據(jù)處理模式
    2024-10-10
  • JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析

    JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析

    當(dāng)產(chǎn)生異常后,并在異常處理器中進(jìn)行執(zhí)行之后,程序會(huì)是如何的一種狀態(tài),是終止還是繼續(xù)執(zhí)行處理之后的代碼呢,下面這篇文章主要給大家介紹了關(guān)于JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 詳解常用的Spring Bean擴(kuò)展接口

    詳解常用的Spring Bean擴(kuò)展接口

    本篇文章主要介紹了一些常用的Spring Bean擴(kuò)展接口以及它們的簡單用法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-05-05
  • java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字

    java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字

    這篇文章主要介紹了java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java如何獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時(shí)間和時(shí)間戳

    Java如何獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時(shí)間和時(shí)間戳

    這篇文章主要介紹了如何在Java中獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時(shí)間和時(shí)間戳,并提供了示例代碼,新手小白完全可以通過文中介紹的代碼實(shí)現(xiàn),需要的朋友可以參考下
    2025-03-03
  • Java泛型機(jī)制必要性及原理解析

    Java泛型機(jī)制必要性及原理解析

    這篇文章主要介紹了Java泛型機(jī)制必要性及原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringCloud將Nacos作為配置中心實(shí)現(xiàn)流程詳解

    SpringCloud將Nacos作為配置中心實(shí)現(xiàn)流程詳解

    這篇文章主要介紹了Springcloud中的Nacos Config服務(wù)配置,本文以用戶微服務(wù)為例,進(jìn)行統(tǒng)一的配置,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 詳解springboot中mybatis注解形式

    詳解springboot中mybatis注解形式

    在本文中小編給大家分享了關(guān)于springboot中mybatis注解形式的介紹,有興趣的可以跟著學(xué)習(xí)下。
    2018-10-10

最新評論

彭泽县| 藁城市| 绍兴县| 永胜县| 四平市| 龙口市| 滦南县| 阳高县| 东源县| 甘肃省| 沙雅县| 江油市| 龙海市| 湟中县| 洪洞县| 隆回县| 白沙| 宁远县| 怀柔区| 玉门市| 宁乡县| 阜宁县| 都安| 大足县| 壤塘县| 曲靖市| 辽宁省| 松潘县| 行唐县| 万载县| 凤台县| 昌宁县| 淮安市| 温州市| 新晃| 昂仁县| 泾阳县| 郧西县| 永宁县| 普兰店市| 南皮县|