精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

五月激情久久久| 日本一区二区三区播放| 欧美韩国日本一区| 18成人在线| 国产成人在线免费视频| 精品久久一区| 欧美tk—视频vk| 黄色国产小视频| wwwav在线| www欧美成人18+| 96国产粉嫩美女| 麻豆成人免费视频| 欧美另类亚洲| 在线丨暗呦小u女国产精品| 国产男女无遮挡猛进猛出| 免费亚洲电影| 亚洲成人资源在线| 一区在线电影| 久久久pmvav| 国产成人一级电影| 国产欧美日韩专区发布| 国产黄色片免费看| 国产精品www994| 最近2019中文字幕在线高清| 97人妻精品一区二区三区免费| 亚洲人体在线| 色天使久久综合网天天| 国产日韩亚洲欧美在线| 黄色在线免费| 中文字幕第一页久久| 九九九九精品九九九九| 国产av精国产传媒| 精品午夜久久福利影院| 国产精品成人aaaaa网站| 日韩成人av毛片| 欧美日韩一区二区三区四区在线观看| 最近2019年中文视频免费在线观看| 99国产精品免费视频| 欧美性www| 欧美日韩三级在线| 黄色高清无遮挡| sis001欧美| 天涯成人国产亚洲精品一区av| 50度灰在线观看| 免费观看成人高潮| 亚洲欧洲av色图| 亚洲一区二区四区| 在线观看精品一区二区三区| 国产三级精品在线| 日本欧洲国产一区二区| 黄色av网站在线看| 国产视频一区不卡| 亚洲草草视频| 在线观看黄av| 亚洲丝袜自拍清纯另类| 玖玖精品在线视频| 综合图区亚洲| 亚洲成人动漫在线观看| 久艹视频在线免费观看| 蜜桃av在线| 欧美视频一二三| 国产精品69页| 成人全视频免费观看在线看| 欧美日韩成人一区二区| 8x8x成人免费视频| 欧美影院视频| 精品国产伦一区二区三区观看方式 | 久久久久成人精品无码中文字幕| 欧美日韩国产网站| 欧美午夜电影一区| 日本中文字幕观看| 欧美一级片网址| 亚洲国模精品私拍| 中文字幕第20页| 97国产精品| 欧美第一页在线| 男女视频免费看| 久久只有精品| 国产精品露脸av在线| 97精品人妻一区二区三区香蕉| 国产伦精品一区二区三区免费迷| 97超碰最新| 青青国产在线| 日韩理论片一区二区| 成人免费在线网| 芒果视频成人app| 3atv在线一区二区三区| 亚洲国产精品狼友在线观看| 欧美男gay| 欧美成人激情视频免费观看| 日本免费一二三区| 天堂一区二区在线免费观看| 91在线观看免费| 亚洲人妻一区二区| 亚洲天堂av老司机| 日av中文字幕| 视频精品一区二区三区| 国产亚洲欧美aaaa| 九九九免费视频| 人人狠狠综合久久亚洲| 99在线影院| www.视频在线.com| 午夜精品福利在线| 欧美性受xxxxxx黑人xyx性爽| 成人自拍在线| 精品国产一区二区三区久久狼5月| 国产真人真事毛片| 久久成人久久爱| 久久偷窥视频| 国产极品人妖在线观看| 欧美日韩国产首页| 国产熟妇搡bbbb搡bbbb| 久久精品影视| 国产精品精品国产| 少妇av在线播放| 亚洲男同1069视频| xx欧美撒尿嘘撒尿xx| 婷婷激情久久| 欧美激情综合色| 国产女18毛片多18精品| 欧美激情一区二区三区不卡| www.玖玖玖| 国产精品45p| 欧美成人免费全部观看天天性色| 亚洲第一网站在线观看| av成人老司机| 隔壁人妻偷人bd中字| 国产aa精品| 日日骚av一区| 毛片在线免费播放| 91亚洲资源网| 欧美久久久久久久久久久久久| 精品网站999| 在线日韩中文字幕| 日本丰满少妇做爰爽爽| 国产午夜精品一区二区| 欧美 国产 日本| 麻豆一区二区| 午夜精品久久久久久久男人的天堂 | 欧美激情精品久久久久久小说| 国产电影一区| 中文字幕欧美日韩| 久久久久久久亚洲| 久久精品男人天堂av| 国产又大又硬又粗| 国产精品免费不| 国产v综合ⅴ日韩v欧美大片| 免费国产在线观看| 日本黄色一区二区| 人人人妻人人澡人人爽欧美一区| 米奇777在线欧美播放| 精品一区二区三区国产| 国产自产自拍视频在线观看| 亚洲国产成人精品一区二区| 国产精品午夜影院| 久久久久久久久久久久久久久99| 亚洲乱码中文字幕久久孕妇黑人| 亚洲+变态+欧美+另类+精品| 日韩av大片免费看| 中文字幕在线播放| 日韩亚洲欧美中文三级| 国产一级片播放| av在线不卡免费看| www黄色av| 成人午夜av| 成人网在线免费看| 青草av在线| 亚洲精品视频在线播放| 成人免费一级片| 亚洲手机成人高清视频| 一级黄色免费视频| 久久久久久色| www.黄色网址.com| 国产一级成人av| 国产精品极品美女粉嫩高清在线| 黄色av电影在线观看| 精品免费视频一区二区| 久草视频一区二区| 综合久久久久久| 欧美日韩一区二区三区四区五区六区| 国产美女诱惑一区二区| 一区二区三区视频| 果冻天美麻豆一区二区国产| 51午夜精品视频| 91在线观看| 欧美成人一级视频| aaa在线视频| 一个色妞综合视频在线观看| 毛茸茸多毛bbb毛多视频| 久久精品久久精品| 国产免费黄色一级片| 凹凸成人精品亚洲精品密奴| av一区和二区| 素人啪啪色综合| 欧美激情18p| 在线观看国产原创自拍视频| 亚洲国语精品自产拍在线观看| 男操女视频网站| 午夜视频一区二区三区| 女人裸体性做爰全过| 北条麻妃一区二区三区| 在线观看的毛片| 亚洲美女视频在线免费观看| 亚洲国产精品一区二区第四页av| 国产精品videossex| 成人亚洲综合色就1024| 黑人巨大精品欧美一区二区桃花岛| 欧美日韩国产一区二区三区不卡| 最新成人av在线| 日韩精品大片| 免费成人三级| 3d蒂法精品啪啪一区二区免费| 在线一区av| 欧美激情精品久久久久久| 91社区在线高清| 日韩av综合网| 丁香花免费高清完整在线播放| 色欧美片视频在线观看在线视频| 久一视频在线观看| 中文字幕一区二区三区在线不卡 | 欧美另类videosbestsex日本| 精品一区在线| 精品一区日韩成人| 超碰在线亚洲| 99re国产视频| 国产麻豆一区二区三区| 国产精品爽黄69| 国产一区二区三区朝在线观看| 久久久久久亚洲精品| 97caopron在线视频| 在线观看国产精品日韩av| 外国精品视频在线观看 | 一二三四在线观看视频| 久久麻豆一区二区| 国产美女视频免费观看下载软件| 国产美女精品人人做人人爽| 色播五月综合网| 日产国产欧美视频一区精品| 日本三区在线观看| 久久国产毛片| 国产精品无码一本二本三本色| 国产精品最新自拍| 情侣黄网站免费看| 久久久久国产精品午夜一区| av免费播放网址| 亚洲资源av| 免费黄色日本网站| 另类天堂av| 美女喷白浆视频| 秋霞午夜鲁丝一区二区老狼| 日本人视频jizz页码69| 日本不卡的三区四区五区| 国产主播中文字幕| 久久电影网电视剧免费观看| 97人人爽人人| 国产乱码精品一区二区三区av| 日韩精品国产一区| eeuss国产一区二区三区| 久久精品女同亚洲女同13| 99视频在线精品| av电影网站在线观看| 久久精品一区八戒影视| 五月天婷婷丁香网| 亚洲色图在线播放| 久久免费视频6| 欧美性生交xxxxxdddd| 无码人妻精品一区二区50| 欧美日韩精品免费| 国产成人麻豆精品午夜在线 | 国产精品久久一区主播| av在线精品| 国产精品国产三级国产专区53| 国产精品99久久免费观看| 欧美连裤袜在线视频| 日韩欧美三级| www.夜夜爱| 久久美女性网| 99中文字幕在线| 成人av电影在线观看| 韩国三级hd中文字幕| 亚洲视频每日更新| 国产精品第9页| 欧美日韩卡一卡二| 亚洲国产综合网| 亚洲色在线视频| 亚洲羞羞网站| 国产99久久久欧美黑人| 国产精品视频一区二区三区| 国精产品99永久一区一区| 成人羞羞在线观看网站| 免费观看亚洲视频| 天堂一区二区在线免费观看| 成人一区二区三区仙踪林| 国产亚洲欧美日韩在线一区| 亚洲国产美女视频| 色视频成人在线观看免| 丰满少妇一级片| 日韩在线小视频| 国内激情视频在线观看| 91在线网站视频| 国产亚洲一区| 国产玉足脚交久久欧美| 精品系列免费在线观看| 极品人妻一区二区三区| 一区二区三区在线免费播放| 69av视频在线观看| 亚洲精品在线电影| 国产剧情在线| 国产精品国产福利国产秒拍| 老汉色老汉首页av亚洲| 国产麻豆电影在线观看| 天堂久久一区二区三区| 亚洲色偷偷色噜噜狠狠99网| 亚洲欧美在线aaa| 91麻豆精品在线| 日韩精品福利在线| 欧美aaaaaaa| 51国偷自产一区二区三区| 成人影视亚洲图片在线| 日本wwww视频| 不卡av免费在线观看| 久久久久久久中文字幕| 91精品婷婷国产综合久久竹菊| 蜜桃视频在线观看网站| 91av在线国产| 国产亚洲精品美女久久| 妺妺窝人体色www看人体| 韩国女主播成人在线| 卡一卡二卡三在线观看| 色哦色哦哦色天天综合| 午夜性色福利影院| 亚洲**2019国产| 国产日韩三级| 蜜桃传媒一区二区三区| 成人免费高清视频| 久久久久久久9999| 日韩免费在线观看| a级网站在线播放| 亚洲最大福利视频网| 91精品秘密在线观看| 国产欧美激情视频| 亚洲欧美在线视频| 99在线小视频| 精品综合久久久久久97| 亚洲高清在线一区| 奇米777四色影视在线看| 国产精品911| 色在线观看视频| 日韩欧美国产小视频| 欧美14一18处毛片| 国内视频一区| 欧美专区在线| 永久免费毛片在线观看| 欧美日韩在线观看一区二区| 91免费在线| 91在线播放国产| 亚洲国产mv| 少妇饥渴放荡91麻豆| 色素色在线综合| 日本不卡不卡| 成人xxxxx色| 中文精品视频| 少妇人妻好深好紧精品无码| 欧美日韩美少妇| 欧美韩日亚洲| 精品在线不卡| 免费成人你懂的| 精品国产乱码久久久久久鸭王1| 欧美电影精品一区二区| 在线能看的av网址| 欧美午夜欧美| 国产一区二区在线观看视频| xxxx 国产| 亚洲性视频网址| 欧美视频二区欧美影视| 国产精品丝袜久久久久久消防器材| 国产女人aaa级久久久级| 国产精品久久免费| 97久久超碰福利国产精品…| 免费视频国产一区| 久久久久久久久久毛片| 亚洲va国产va欧美va观看| 高清美女视频一区| 亚洲在线观看视频网站| 香蕉久久久久久久av网站| 欧美性生交大片| 亚洲精品福利免费在线观看| 91在线亚洲| 国产欧美日韩网站| 中文字幕精品一区二区精品绿巨人| 国产色片在线观看| 国产91色在线| 午夜日韩av| 亚洲毛片亚洲毛片亚洲毛片| 日韩精品一区二区三区中文不卡| 日韩电影大全网站| 日本人妻伦在线中文字幕| 亚洲国产精品二十页| 人妻一区二区三区| 国产日韩欧美电影在线观看|