最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

三分鐘實(shí)戰(zhàn)手寫Spring Boot Starter

2023-02-24 11:25 作者:要寵你上天  | 我要投稿

1 背景#

在平時的開發(fā)中,開發(fā)的同學(xué)會把一些通用的方法,寫成一個工具類,例如日期轉(zhuǎn)換的,JSON轉(zhuǎn)換的等等,方便業(yè)務(wù)后續(xù)調(diào)用,使代碼更容易維護(hù)。

如果一些更常用的方法,例如鑒權(quán)的,加解密的等等,幾乎每個項(xiàng)目都會使用到,這時候開發(fā)的同學(xué)就會從以前的項(xiàng)目中再抄過來,隨著項(xiàng)目的增多,幾乎每個項(xiàng)目都有一份一模一樣的工具類。經(jīng)過技術(shù)評審決定,將這些工具類打包成jar包,后續(xù)的新項(xiàng)目可以直接以jar包的形式引入,重用就會變得非常的好。

由于項(xiàng)目本身是基于Spring Boot進(jìn)行開發(fā),jar包以Spring Boot Starter的方式發(fā)布似乎是不錯的選擇。

2 介紹#

Spring Boot Starter 和普通jar包的區(qū)別在于,Spring Boot Starter?更加靈活,提供了自動裝配的機(jī)制,以及可供用戶配置等。下面以?加解密作為例子,手寫一個?Spring Boot Starter?,從實(shí)戰(zhàn)到原理去了解它的工作過程。

3 創(chuàng)建項(xiàng)目#

創(chuàng)建一個Spring Boot 的項(xiàng)目,項(xiàng)目命名為digest-spring-boot-starter

spring官方的包命名為:spring-boot-starter-xxx

第三方包命名為:xxx-spring-boot-starter

pom.xml中引入依賴commons-codec(apache官方提供的加解密算法的工具包)

4 主體部分#

加密邏輯書寫,提供一個?Digest?接口,使用常用的?Md5和?Sha256摘要算法進(jìn)行加密實(shí)現(xiàn)。

如果需要用戶來指定使用哪種加密算法,需要在application.properties中添加一項(xiàng)配置:

digest.type=sha

創(chuàng)建一個配置類,拿到用戶配置的type:

日常開發(fā)中,比較常用的幾個注解為:

@ConditionalOnBean:當(dāng)容器中存在指定Bean的條件下

@ConditionalOnClass:當(dāng)類路徑匣有指定類的條件下

@ConditionalOnProperty:指定的屬性是否有指定的值

5 配置自動裝配#

在 resources 目錄下,創(chuàng)建一個文件夾名為?META-INF,創(chuàng)建一個文件名為spring.factories

這一步是固定寫法

由于我們自己開發(fā)的starter是沒有啟動類的,所以需要告訴引用 starter 的項(xiàng)目,需要去加載哪些類。

spring.factories中填寫:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xiaofengstu.digest.conf.Config

注釋掉pom.xml中關(guān)于spring-boot-maven-plugin的部分,以至于后續(xù)執(zhí)行?mvn package?操作得到是一個標(biāo)準(zhǔn)的jar包。

再執(zhí)行mvn install?將?starter打包到本地倉庫中。

6 使用starter#

在需要的項(xiàng)目中引入剛剛打包好的starter

在代碼中直接注入?Digest?即可:

總結(jié)#

  1. spring boot 2.7+ 的版本,spring.factorys寫法稍有改動:

  1. 文件內(nèi)容,一行就是一個裝配類:

  1. 如果沒看明白的,可以參考一下?mybatis-plus-spring-boot-starter的寫法


三分鐘實(shí)戰(zhàn)手寫Spring Boot Starter的評論 (共 條)

分享到微博請遵守國家法律
塔河县| 广宗县| 栾川县| 长沙县| 海阳市| 府谷县| 丹凤县| 永宁县| 怀柔区| 涿鹿县| 四子王旗| 乌兰察布市| 安丘市| 莒南县| 深泽县| 阿尔山市| 苏尼特左旗| 和平县| 桦甸市| 西乡县| 吉林省| 怀集县| 交口县| 临江市| 宜州市| 潍坊市| 彭泽县| 河间市| 商洛市| 永福县| 泗阳县| 嘉义县| 凤山县| 广宁县| 邹平县| 鄂托克旗| 军事| 彭山县| 包头市| 宜宾市| 崇义县|