精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

手把手帶你編寫屬于自己的 Starter

開發
一個 Starter 其實就是對一個功能的集成封裝,然后對外提供一個依賴,讓業務去使用,像我們熟悉的 Redis,mongo,mybatis 等。

前面的文章阿粉給大家介紹了 ??SpringBoot 的自動裝配功能??,相信大家對自動裝配都有了很好的理解,那么今天阿粉通過一個示例來給大家演示一下如何編寫一個自己的 starter。

再編寫 starter 之前我們先了解一下什么是 starter,一個 starter 其實就是對一個功能的集成封裝,然后對外提供一個依賴,讓業務去使用,像我們熟悉的 Redis,mongo,mybatis 等。另外由于任何人都可以編寫自己的 starter,那么為了區分官方的 starter 和個人的 starter,通常在命名上面會有一個規范。所以 SpringBoot 官方提出,第三方在建立自己的 Starter 的時候命名規則統一用xxx-spring-boot-starter,而官方提供的 Starter 統一命名方式為spring-boot-starter-xxx。

通過我們前面的文章,我們知道自動裝配首先要有一個配置類,其次還要有 spring.factories 文件,所以這兩步是必不可少的。接下來我們就實操一下。

編寫配置類

編寫配置類首先要添加一個自動裝配的依賴,然后再編寫對應的配置類和業務實現類,在 pom 中添加如下依賴:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.7.1</version>
</dependency>

裝配類:

package com.example.hash.starter.config;

import com.example.hash.starter.service.MyHashTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnClass({MyHashTemplate.class})
@EnableConfigurationProperties(MyHashProperties.class)
public class MyHashAutoConfiguration {

@Autowired
MyHashProperties myHashProperties;

@Bean
@ConditionalOnMissingBean(MyHashTemplate.class)
public MyHashTemplate myJsonService() {
MyHashTemplate myHashTemplate = new MyHashTemplate();
myHashTemplate.setPrefix(myHashProperties.getHashPre());
return myHashTemplate;
}
}

屬性類:

package com.example.hash.starter.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "ziyou.hash")
public class MyHashProperties {
private String hashPre;

public String getHashPre() {
return hashPre;
}

public void setHashPre(String hashPre) {
this.hashPre = hashPre;
}
}

業務實現類:

package com.example.hash.starter.service;

import javax.xml.bind.DatatypeConverter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MyHashTemplate {

private String prefix;

public String myHash(String origin) {
if (null == origin || origin.length() == 0) {
return null;
}
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(origin.getBytes());
byte[] digest = md.digest();
return this.prefix + ":" + DatatypeConverter.printHexBinary(digest).toUpperCase();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}

public void setPrefix(String prefix) {
this.prefix = prefix;
}
}

簡單說明一下上面三個類都是干什么的,MyHashTemplate 該類是實際業務需要注入的類,用來對入參進行 MD5 摘要,然后返回一個拼接了前綴的字符串給業務。這個前綴是通過 application.properties 中配置 ziyou.hash.hashPre=JavaGeekTech666 配置后傳遞過來的。MyHashProperties 是接受屬性值的類,MyHashAutoConfiguration 則是自動裝配類,這個類會根據條件進行 MyHashTemplate  Bean 的初始化,并將前綴進行賦值。

增加配置文件

最后還需要在 resource 文件中編寫一個 META-INF/spring.factories 文件,內容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.hash.starter.config.MyHashAutoConfiguration

前面的 Key 是固定寫法,后面的 value 就是配置類的全路徑引用地址。

在項目中使用

編寫完了 starter 過后,我們再創建一個新的 web 應用,在其中增加我們編寫的 starter 來驗證是否成功。第一步在 pom 文件中增加依賴

    <dependency>
<groupId>com.starter.example</groupId>
<artifactId>myhash-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
package com.example.demo.controller;

import com.example.demo.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@Autowired
private HelloService helloService;

@GetMapping(value = "/hello")
public String hello(@RequestParam("name") String name) {
return helloService.sayHello(name);
}
}
package com.example.demo.service;

import com.example.hash.starter.service.MyHashTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class HelloService {
@Autowired
private MyHashTemplate myHashTemplate;

public String sayHello(String name) {
return myHashTemplate.myHash(name);
}
}

在 application.properties 文件中增加如下配置:

ziyou.hash.hashPre=JavaGeekTech

啟動項目,我們訪問地址 http://127.0.0.1:8080/hello?name=ziyou 可以看到效果如下:

圖片

至此可以看到,我們自己編寫的 starter 已經成功生效了,只不過功能很簡單而已,我們完全可以根據自己需要的實際功能來實現一個復雜一點的 starter 來提供開箱即用的效果。

在一些大公司特別是一些中間件或者中臺團隊,很多時候都是提供各種工具的 starter 來給業務團隊使用的,畢竟很多重復的功能如果每個業務團隊都自己開發的話,完全是浪費資源,通過中臺團隊統一封裝 starter,讓各個業務團隊拿來就用快速搭建業務即可。

責任編輯:趙寧寧 來源: Java極客技術
相關推薦

2023-01-30 09:27:57

開發自動化配置

2023-03-27 08:28:57

spring代碼,starter

2021-09-26 16:08:23

CC++clang_forma

2023-03-29 10:02:36

2021-10-21 10:25:32

Windows7操作系統微軟

2022-01-04 08:52:14

博客網站Linux 系統開源

2017-09-05 13:01:11

CocoaPods開源庫GitHub

2024-03-18 18:07:38

VSCode插件文件

2021-12-15 07:24:57

人工神經網絡翻譯

2020-12-13 11:38:09

Go語言clac包

2022-11-07 18:36:03

組件RPC框架

2019-11-12 10:50:13

Spring BootstarterJava

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2025-05-07 00:31:30

2021-07-14 09:00:00

JavaFX開發應用

2021-01-08 10:24:32

Python項目基礎

2021-02-26 11:54:38

MyBatis 插件接口

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統
點贊
收藏

51CTO技術棧公眾號

成年人的黄色片| 亚洲欧美精品在线观看| 国产精品suv一区二区三区| 三级精品视频| 欧美日韩国产美女| 国产成a人亚洲精v品在线观看| 无码国精品一区二区免费蜜桃| 日本女优在线视频一区二区| 久久6精品影院| 我和岳m愉情xxxⅹ视频| 曰本一区二区| 日韩欧美中文第一页| av磁力番号网| 国产无套粉嫩白浆在线2022年| 精品一区二区三区在线播放| 久久久在线观看| 日本不卡一区视频| 西瓜成人精品人成网站| 欧美一级日韩不卡播放免费| 北条麻妃在线观看| 成人女同在线观看| 亚洲欧洲制服丝袜| 日韩色妇久久av| 色婷婷av一区二区三区之红樱桃| 久久精品国产一区二区三| 国模私拍视频一区| 国产精品 欧美激情| 国产亚洲精品美女久久久久久久久久| 日韩欧美卡一卡二| 91精品999| 午夜无码国产理论在线| 亚洲成人精品影院| 91看片淫黄大片91| 91青青在线视频| 成人一区在线观看| 国产精品色悠悠| 69视频免费在线观看| 午夜国产精品视频免费体验区| 尤物九九久久国产精品的特点 | 欧美黑人巨大xxxxx| 亚洲已满18点击进入久久| 精品91一区二区三区| 成人免费在线视频网| www日韩大片| 国内精品久久国产| 熟妇人妻中文av无码| 成人av在线网| 精品蜜桃一区二区三区| 人妻一区二区三区免费| 国产成人在线影院| 91成人伦理在线电影| 国产欧美久久久| 激情综合色综合久久综合| 国产在线观看91精品一区| 久久久999久久久| 日韩成人免费电影| 国产精品午夜一区二区欲梦| 小泽玛利亚一区二区三区视频| 久久久水蜜桃av免费网站| 久久久亚洲国产| 日韩欧美大片在线观看| 亚洲精品男同| 全球成人中文在线| 久久影视中文字幕| 免费看黄色91| 96pao国产成视频永久免费| 国产尤物在线观看| 国产成人小视频| 国产自产在线视频一区| 男人天堂资源在线| 国产精品毛片久久久久久| 在线观看欧美一区| 日本高清成人vr专区| 亚洲国产综合人成综合网站| 免费观看国产精品视频| 性欧美18一19sex性欧美| 精品视频999| 91香蕉国产线在线观看| a看欧美黄色女同性恋| 日韩二区三区在线| 亚洲国产天堂av| 亚洲成人tv| 欧美精品video| 国产免费a视频| 国产一区二区三区在线观看精品 | 手机看片福利盒子久久| 四虎影视成人精品国库在线观看| 日韩欧美一区在线| 九色porny自拍视频| 色狮一区二区三区四区视频| 欧美国产精品人人做人人爱| 黄色一级片免费在线观看| 久99久精品视频免费观看| 成人资源视频网站免费| 国产一区二区影视| 一级日本不卡的影视| 国产日韩成人内射视频| 日日夜夜精品视频| 亚洲人成绝费网站色www| 黑人操日本美女| 亚洲一区二区三区免费在线观看| 国产日韩欧美91| 香港一级纯黄大片| 亚洲欧美日韩精品久久久久| 人妻少妇被粗大爽9797pw| 爱情电影网av一区二区| 亚洲九九九在线观看| 国产性xxxx| 日韩av一区二区在线影视| 91久久国产综合久久蜜月精品| 狠狠狠综合7777久夜色撩人| 亚洲午夜久久久久| 红桃视频 国产| 欧美激情在线免费| 久久久久久久爱| 96日本xxxxxⅹxxx17| 97se亚洲国产综合自在线不卡| 综合一区中文字幕| 91精品影视| 日韩精品极品毛片系列视频| 欧美成人精品欧美一级私黄| 国内精品久久久久久久影视蜜臀| 国产精品美女主播| 午夜福利一区二区三区| 一区二区三区中文在线观看| 日本 片 成人 在线| 三级精品视频| 69久久夜色精品国产7777| 999久久久久| 国产精品福利一区二区三区| 韩国一区二区av| 色吊丝一区二区| 97久久精品人搡人人玩| 亚洲av无码一区二区乱子伦| 日韩一区中文字幕| 欧美美女性视频| 精品日韩免费| 国产精品第七十二页| 猫咪在线永久网站| 色网站国产精品| 亚洲第一页av| 久久亚洲风情| 欧美成ee人免费视频| 亚洲黄色中文字幕| 国产丝袜一区二区| 免费看日批视频| 久久综合一区二区| 亚洲人成无码www久久久| 亚洲丁香日韩| 国产成人一区二区| 成人高清在线| 欧美日韩国产另类一区| 亚洲人与黑人屁股眼交| 国产真实乱子伦精品视频| 一区精品在线| 麻豆一区在线| 欧美黑人xxxx| 亚洲av成人精品毛片| 欧美日韩亚洲精品一区二区三区| 国产精品无码网站| 久久午夜电影| 一本一本久久a久久精品综合妖精| 992tv国产精品成人影院| 亚洲人成欧美中文字幕| 日批视频免费观看| ...中文天堂在线一区| 亚洲热在线视频| 一区精品久久| 欧美欧美一区二区| 精品国产黄a∨片高清在线| xxx一区二区| 东京干手机福利视频| 亚洲成人动漫精品| av网站免费在线看| 久久97超碰国产精品超碰| 97超碰国产精品| 免费成人av| 成人有码在线播放| 成人免费观看在线观看| 亚洲天堂影视av| 国产视频手机在线| 日韩欧美精品免费在线| 波多野结衣家庭教师在线观看| 国产乱理伦片在线观看夜一区| 国产a级片网站| 成人写真视频| 成人欧美一区二区三区视频 | www.中文字幕久久久| 91精品免费在线观看| 国产小视频在线免费观看| 中文字幕av免费专区久久| 人妻体体内射精一区二区| 国产精品久久久久毛片大屁完整版| 亚洲国产精品一区二区第一页 | 日韩第一页在线| 伊人网免费视频| 亚洲国产cao| 日韩免费av一区| 91美女视频网站| 伊人免费视频二| 三级久久三级久久| 久久久久99精品成人片| 日本不卡高清| 久久99影院| 51亚洲精品| 国产视频观看一区| 厕沟全景美女厕沟精品| 欧美日韩爱爱视频| 午夜在线视频| 亚洲欧美www| 国产77777| 日韩一区二区电影在线| 亚洲成人av网址| 精品国产999| 麻豆一区产品精品蜜桃的特点| 亚洲国产精华液网站w| 成人h动漫精品一区| 国产精品亚洲第一| 最新天堂中文在线| 日韩极品在线观看| 亚洲国产精品久久久久婷蜜芽| 午夜天堂精品久久久久| 中文字幕一区二区三区四区五区| 久久91麻豆精品一区| 国产免费一区二区| 136导航精品福利| 91热精品视频| 亚洲一区导航| 成人精品久久久| 国产精品久久乐| 国产精品久久久久久网站| 在线能看的av网址| 66m—66摸成人免费视频| aa视频在线观看| 久久久久久久久国产| 影院在线观看全集免费观看| 日韩一区在线视频| 麻豆传媒免费在线观看| 日韩专区在线观看| 日本蜜桃在线观看| 久久国产一区二区三区| 色网站在线看| 久久视频在线播放| sm国产在线调教视频| 麻豆乱码国产一区二区三区 | 女人扒开双腿让男人捅| 国产做a爰片久久毛片 | 26uuu欧美| 国产麻豆天美果冻无码视频 | 日本女人一区二区三区| 亚洲第一中文av| 精品一区二区三区免费播放| jizz18女人| 国产一本一道久久香蕉| 麻豆av免费看| 91在线你懂得| 日本一级免费视频| 国产精品福利一区二区| 青青操视频在线播放| 亚洲丶国产丶欧美一区二区三区| 日本少妇bbwbbw精品| 欧美日韩黄色大片| 中文字幕免费高清网站| 欧美日韩黄视频| 性生活视频软件| 日韩国产欧美精品在线| 国产亚洲依依| 久久九九亚洲综合| 超免费在线视频| 日韩av成人在线| 99精品国产九九国产精品| 超碰97网站| 美女毛片一区二区三区四区| 亚洲欧美成人一区| 国产精品久久| 妺妺窝人体色www在线观看| 久久爱www久久做| 国产女人18毛片水真多18| 国产无一区二区| 澳门黄色一级片| 欧美午夜精品久久久久久人妖| 亚洲天堂网在线观看视频| 日韩欧美成人激情| 国产中文在线视频| 久久69精品久久久久久久电影好| 天堂√中文最新版在线| 国产美女扒开尿口久久久| ady日本映画久久精品一区二区| 久久久久高清| 综合日韩在线| 成人在线免费播放视频| 国产成人一区在线| 黄色国产在线播放| 黄色精品在线看| 国产又大又长又粗| 国产香蕉97碰碰久久人人| 深夜国产在线播放| 国产精品久久久久久五月尺| 国产精品任我爽爆在线播放| 亚洲成人精品电影在线观看| 亚洲韩日在线| 九九九久久久久久久| 国产欧美一区二区精品秋霞影院| 久热这里只有精品在线| 欧美日韩在线播| 日本私人网站在线观看| 久久99久久99精品中文字幕| 成人日韩在线观看| 精品国产乱码久久久久久丨区2区| 五月婷婷亚洲| 色综合手机在线| 97久久精品人人做人人爽| 国产高潮流白浆| 欧美特级限制片免费在线观看| 欧美在线 | 亚洲| 欧美另类交人妖| 欧美激情福利| 日本中文不卡| 亚洲综合日韩| 精品人妻一区二区三区香蕉| 亚洲国产中文字幕| 亚洲第一色网站| 美乳少妇欧美精品| 99久久99九九99九九九| 视频一区二区三| 久久不射中文字幕| 中文字幕影片免费在线观看| 亚洲最大成人综合| 国产黄色av片| 久久国产色av| 欧美第一在线视频| 中文字幕第一页亚洲| 麻豆免费精品视频| 黄色一级片一级片| 精品视频在线看| 午夜小视频在线| 91精品视频网站| 91精品综合久久久久久久久久久 | 成人激情小说乱人伦| 国产大片免费看| 日韩午夜在线观看| 日本成人不卡| 国产在线精品一区| 一本久久知道综合久久| free性中国hd国语露脸| 欧美日韩国产一区二区三区| 亚洲欧美色视频| 日本韩国在线不卡| 国产剧情一区| 国产成人黄色网址| 亚洲人被黑人高潮完整版| 国产夫妻自拍av| 欧美精品久久久久久久免费观看| 亚洲一区二区三区在线免费| av免费看网址| 2024国产精品| 亚洲高清在线看| 久久久国产一区二区三区| 国产色99精品9i| 青青草国产免费| 91亚洲精品久久久蜜桃| 国产黄网在线观看| 日韩一区视频在线| 国产精品x8x8一区二区| 免费午夜视频在线观看| 国产视频一区不卡| 国产三级三级在线观看| 欧美激情成人在线视频| 国产成人精品999在线观看| www.国产视频.com| 亚洲午夜一区二区| 精品一二三区视频| 成人写真福利网| 在线欧美福利| 久久亚洲AV无码专区成人国产| 欧美乱妇15p| 大香伊人中文字幕精品| 色综合视频二区偷拍在线| 国产一区欧美二区| 91av在线免费视频| www.久久色.com| 精品亚洲自拍| www.久久91| 亚洲成av人片在线| 无遮挡动作视频在线观看免费入口 | 亚洲网站在线看| 日韩一区二区三区精品 | 韩国精品在线观看| 亚洲精品国产精品乱码| 日韩在线国产精品| 欧美三级电影在线| 99九九精品视频| 一本大道久久a久久精二百| 成年视频在线观看| 欧美日韩电影一区二区三区| 国产一区二区看久久| 成人免费毛片视频| 国内成人精品视频| 国产二区精品| 丰满少妇高潮一区二区|