傳統的 Maven項目通常將須要被複用的組件作成 Module來進行管理,以便二次調用;而在 Spring Boot項目中咱們則可使用更加優雅的 Spring Boot Starter來完成這一切。 基於Spring Boot開發應用的過程可謂是幸福感滿滿,其開箱即用的特性分析已經在 《SpringBoot 應用程序啓動過程探祕》一文中詳細敘述過了。這個開箱即用的魔法特性很大程度上來源於各式各樣 Spring Boot Starter的加持,並且隨着版本的迭代 Starter家族成員日益龐大,並且各類優秀開源做者也提供了不少很是好用的Spring Boot Starter。html
本文則嘗試自制一個Spring Boot Starter並推送到遠端倉庫進行管理。java
注: 本文首發於 My Personal Blog:CodeSheep·程序羊,歡迎光臨 小站git
本文準備封裝一個簡單的 MD5摘要工具的 Starter,命名爲 md5test-spring-boot-starter
,其本質就是一個 Maven項目,只不過咱們須要完善pom文件的相關依賴:github
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
複製代碼
首先提供一個 MD5Util
工具類,負責實際的 MD5加密:算法
public class MD5Util {
public static String getMD5( String source ) {
return getMD5( source.getBytes() );
}
public static String getMD5(byte[] source) {
String s = null;
char hexDigits[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte tmp[];
synchronized ( MD5Util.class ) {
md.update(source);
tmp = md.digest();
}
char str[] = new char[16 * 2];
int k = 0;
for (int i = 0; i < 16; i++) {
byte byte0 = tmp[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
s = new String(str);
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
}
複製代碼
再來提供一個 MD5Service
類 進行一次封裝spring
public class MD5Service {
public String getMD5( String input ) {
return MD5Util.getMD5( input.getBytes() );
}
}
複製代碼
這一步十分重要,也是編寫 Spring Boot Starter最重要的一步:springboot
@Configuration
public class MD5AutoConfiguration {
@Bean
MD5Service md5Service() {
return new MD5Service();
}
}
複製代碼
固然此處能夠說是最簡自動裝配類了,該部分其實還包含各類豐富的可控註解,能夠 參考這裏!bash
咱們還須要在 resources/META-INF/
下建立一個名爲 spring.factories
的文件,而後置入如下內容:app
org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.codesheep.auto.MD5AutoConfiguration
複製代碼
這一步也是至關重要哇,爲何這一步這麼重要呢,由於我已經在文章《SpringBoot 應用程序啓動過程探祕》 中講過了,Spring Boot自動注入的奧祕就來源於 Spring Boot應用在啓動過程當中會經過 SpringFactoriesLoader
加載全部 META-INF/spring.factories
文件,經過一系列的處理流程最終將 spring.factories 文件中的定義的各類 beans
裝載入 ApplicationContext容器。spring-boot
這一步搞定以後其實一個 Spring Boot Starter已經寫好了,接下來能夠經過
mvn:install
打包,並傳到 私有/公有Maven倉庫以供使用了。
不少公司都搭有私有的 Maven倉庫,但我的實驗能夠藉助於 JitPack這個 「遠端公服」來爲咱們託管自制的 Spring Boot Starter。
咱們將編寫好的 Spring Boot Starter代碼置於 Github公有倉庫上,而後經過 JitPack來拉取咱們的代碼並打包生成Jar包便可
新建一個測試工程來測試一下咱們編寫的 md5test-spring-boot-starter
。工程建立完畢後,在 pom.xml
中加入以下兩個元素:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
複製代碼
md5test-spring-boot-starter
依賴:<dependency>
<groupId>com.github.hansonwang99</groupId>
<artifactId>md5test-spring-boot-starter</artifactId>
<version>0.0.1</version>
</dependency>
複製代碼
再編寫一個測試 Controller來測一下MD5摘要算法的功能:
@RestController
public class TestController {
@Autowired
private MD5Service md5Service;
@RequestMapping("/test")
public String getMD5() {
return "MD5加密結果爲:" + md5Service.getMD5("mypassword");
}
}
複製代碼
調用 /test
接口後的加密結果爲:
MD5加密結果爲:34819D7BEEABB9260A5C854BC85B3E44
複製代碼
因爲能力有限,如有錯誤或者不當之處,還請你們批評指正,一塊兒學習交流!
可 長按 或 掃描 下面的 當心心 來訂閱做者公衆號 CodeSheep,獲取更多 務實、能看懂、可復現的 原創文 ↓↓↓