国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

怎么打造一個(gè)SpringBoot自定義的Starter

發(fā)布時(shí)間:2021-09-14 18:13 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 服務(wù)器 歡迎投稿:712375056

這篇文章主要講解了“怎么打造一個(gè)SpringBoot自定義的Starter”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“怎么打造一個(gè)SpringBoot自定義的Starter”吧!

SpringBoot 的 Starter 其實(shí)并沒(méi)有什么神奇的。只是最近很多人問(wèn)起我,而且我的百度搜索指數告訴我,最近搜索 druid-spring-boot-starter 的人在增多。于是,我今天便給大家科普一下,如何自定義實(shí)現一個(gè) SpringBoot 的 Starter。

任何的學(xué)習都是先從模仿開(kāi)始的,為此,我們先來(lái)看看 mybatis-spring-boot-starter 的結構。然后來(lái)對照著(zhù)模仿一個(gè)。

首先,我們打開(kāi) mybatis-spring-boot-starter 的 pom.xml 文件,你會(huì )發(fā)現在它引用的眾多 dependency 中有一個(gè) mybatis-spring-boot-autoconfigure。其他的像 JDBC,Mybatis,Spring 都是非 starter 模式整合 Mybatis 必須的,可以忽略不看。

 

然后,我們順著(zhù) mybatis-spring-boot-autoconfigure 去看看它的 pom.xml 文件。

 

你會(huì )發(fā)現里面有兩個(gè)重要的引用 spring-boot-autoconfigure 和 spring-boot-configuration-processor。

為什么關(guān)注這兩個(gè)呢?因為只有這兩個(gè)才是 Spring Boot 提供的,其他的都不是。

如果你還沒(méi)有發(fā)現規律,你可以在看看 spring-boot-starter-jdbc 的構造??吹?starter 多了后,你會(huì )發(fā)現,所有的 starter 中都引入了 spring-boot-configuration-processor 和 spring-boot-autoconfigure。

除此之外,我前面的文章還說(shuō)過(guò),@Conditional 注解在 SpringBoot 中啟動(dòng)承上啟下的作用。根據 @Conditional 引出來(lái)的 @ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty 等共同構成了一些根據選擇,按需配置。

在 SpringBoot 的腦圖和源碼解讀中,我也說(shuō)過(guò) @SpringBootApplication 會(huì )拿到各個(gè) starter 中的 META-INF/spring.factories 中需要自動(dòng)配置的類(lèi)的全類(lèi)名。把自動(dòng)配置的類(lèi)全名放入 ImportSelector 中,從而創(chuàng )建了自動(dòng)配置類(lèi),根據自動(dòng)配置類(lèi)中的邏輯,進(jìn)行相應的自動(dòng)配置。

因此,根據上面的簡(jiǎn)單解讀,下面我們就一起來(lái)動(dòng)手擼一個(gè)自定義的 Starter。

先建一個(gè) xttblog-spring-boot-starter 的 Maven 項目,pom.xml 中的配置如下:

其中 spring-boot-configuration-processor 的作用是編譯時(shí)生成spring-configuration-metadata.json, 此文件主要給 IDE 使用,用于提示使用。如在intellij idea中,當配置此jar相關(guān)配置屬性在application.yml, 你可以用 ctlr+ 鼠標左鍵,IDE 會(huì )跳轉到你配置此屬性的類(lèi)中。沒(méi)有 spring-boot-configuration-processor 不會(huì )出錯,但是沒(méi)有提示,不完美,所以,我們把它也加上。

另外,看我這個(gè) Maven 項目的命名,xttblog-spring-boot-starter 符合 SpringBoot 的要求:{name}-spring-boot-starter。只有官方的 starter ,名字在后面。spring-boot-starter-{name},你可以看看上面我舉例的 mybatis 和 druid,都符合命名規范。

接下來(lái),我們的自定義 starter 實(shí)現一個(gè)簡(jiǎn)單業(yè)務(wù)。輸入一個(gè)字符串,我們輸出:“業(yè)余草 say,hello字符串www.xttblog.com”。

然后定義 prefix 和 suffix 屬性類(lèi)。

接下來(lái)就是最重要的自動(dòng)配置類(lèi)。

再重復一下,這幾個(gè)關(guān)鍵的 @Conditional。

  • @ConditionalOnClass,當 classpath 下發(fā)現該類(lèi)的情況下進(jìn)行自動(dòng)配置。

  • @ConditionalOnMissingBean,當 Spring Context 中不存在該 Bean 時(shí)。

  • @ConditionalOnProperty 當配置文件中xttblog.hello.service=true時(shí)執行。

最后,別忘記了 spring.factories。在 resources/META-INF/ 下創(chuàng )建 spring.factories 文件,內容如下:

最后,你可以運行 mvn:install 打包安裝,一個(gè)自定義的 Spring Boot Starter 便開(kāi)發(fā)完成了。然后你在其他 SpringBoot 項目中就可以這樣使用 xttblog-spring-boot-starter。

具體的測試過(guò)程,我就不貼了。大家自己動(dòng)手,收獲更大!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

电影内射视频免费观看| 国产精品美女久久久| 亚洲成人色区| 久久久久青草大香综合精品| 水蜜桃AV无码一区二区| 18禁勿入免费网站入口不卡|