傳統的 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(); } }
固然此處能夠說是最簡自動裝配類了,該部分其實還包含各類豐富的可控註解,能夠 參考這裏!app
咱們還須要在 resources/META-INF/
下建立一個名爲 spring.factories
的文件,而後置入如下內容:spring-boot
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 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
因爲能力有限,如有錯誤或者不當之處,還請你們批評指正,一塊兒學習交流!