成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手帶你編寫屬于自己的 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

2021-10-21 10:25:32

Windows7操作系統微軟

2023-03-29 10:02:36

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

人工神經網絡翻譯

2022-11-07 18:36:03

組件RPC框架

2020-12-13 11:38:09

Go語言clac包

2019-11-12 10:50:13

Spring BootstarterJava

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機

2021-07-14 09:00:00

JavaFX開發應用

2021-01-08 10:24:32

Python項目基礎

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

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

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩国产黄色片 | 欧美久久视频 | 日韩欧美中文字幕在线观看 | 一色桃子av一区二区 | 中文字幕一区二区三区在线视频 | 91免费视频 | 久久久综合| 99九九视频 | 亚洲成人99 | 久久久免费| 91精品国产91久久久久久吃药 | 成人网在线观看 | 成人一区在线观看 | 91色视频在线观看 | 中文字幕在线观看日韩 | a天堂在线 | 日日天天| 欧美中文字幕一区二区三区亚洲 | 久久国产婷婷国产香蕉 | 中国一级大毛片 | 偷拍亚洲色图 | 午夜免费在线电影 | 国产在线麻豆精品入口 | 午夜影院 | 久久精品亚洲一区 | 欧美精品二区 | 亚洲精品视频免费 | 国产精品国产三级国产aⅴ无密码 | 亚洲一区二区三区久久久 | 亚洲天堂av在线 | 理论片87福利理论电影 | 久久久久久国产精品久久 | 韩日一区二区三区 | 欧美日韩在线免费 | 国产在线精品一区二区三区 | 中文字幕色站 | 99reav| 国产一区二区三区久久久久久久久 | 欧美aⅴ | 九九热在线观看视频 | 亚洲一av|