传统的 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,获取更多 务实、能看懂、可复现的 原创文 ↓↓↓