文章共 863字,阅读大约需要 3分钟,文尾有计时器可自行对时!

概 述

传统的 Maven项目一般将需要被复用的组件做成 Module来进行管理,以便二次调用;而在 Spring Boot项目中我们则可以使用更加优雅的 Spring Boot Starter来完成这一切。 基于Spring Boot开发应用的过程可谓是幸福感满满,其开箱即用的特性分析已经在 《Spring Boot 应用程序启动过程探秘》一文中详细叙述过了。这个开箱即用的魔法特性很大程度上来源于各式各样 Spring Boot Starter的加持,而且随着版本的迭代 Starter家族成员日益庞大,而且各种优秀开源作者也提供了很多非常好用的Spring Boot Starter。

本文则尝试自制一个Spring Boot Starter并推送到远端仓库进行管理。

注: 本文首发于 作者公众号 CodeSheep ,可 长按 / 扫描 下面的 小心心 来订阅 ↓ ↓ ↓


新建项目

本文准备封装一个简单的 MD5摘要工具的 Starter,命名为 md5test-spring-boot-starter,其本质就是一个 Maven项目,只不过我们需要完善pom文件的相关依赖:

<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类 进行一次封装

public class MD5Service {    public String getMD5( String input ) {        return MD5Util.getMD5( input.getBytes() );    }}

编写自动装配类

这一步十分重要,也是编写 Spring Boot Starter最重要的一步:

@Configurationpublic class MD5AutoConfiguration {    @Bean    MD5Service md5Service() {        return new MD5Service();    }}

当然此处可以说是最简自动装配类了,该部分其实还包含各种丰富的可控注解,可以 参考 Spring Boot官方文档!


编写 spring.factories

我们还需要在 resources/META-INF/ 下创建一个名为 spring.factories的文件,然后置入以下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.codesheep.auto.MD5AutoConfiguration

这一步也是相当重要哇,为什么这一步这么重要呢,因为我已经在文章《Spring Boot 应用程序启动过程探秘》 中讲过了,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包即可


使用 Spring Boot Starter

新建一个测试工程来测试一下我们编写的 md5test-spring-boot-starter。工程创建完毕后,在 pom.xml中加入如下两个元素:

  • 添加 JitPack repository
    <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

后 记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!

个人网站:www.codesheep.cn (程序羊)

我的更多系列原创文章在此:
● 程序羊的2018年终总(gen)结(feng)
● 利用K8S技术栈打造个人私有云系列连载文章
● 从一份配置清单详解Nginx服务器配置
● Spring Boot Admin 2.0开箱体验
● 一文上手 Elasticsearch常用可视化管理工具
● Docker容器可视化监控中心搭建
● 利用ELK搭建Docker容器化应用日志中心
● RPC框架实践之:Google gRPC
● 一文详解 Linux系统常用监控工具
作者更多 务实、能看懂、可复现的 原创文章尽在公众号 CodeSheep,欢迎订阅 ⬇️⬇️⬇️

©著作权归作者所有:来自51CTO博客作者mb5fdcae83766b7的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Spring Boot系列实战文章合集(附源码)
  2. 不懂为什么,突然想写一写这篇文章
  3. 一篇文章完全掌握 JavaScript 数组操作[每日前端夜话0x87]
  4. 看完这篇文章,我彻底爱上了Python动态图表!
  5. 2018年原创精选文章汇总
  6. 2018年文章汇总
  7. 2021的第一篇文章,开个好头先
  8. 100篇原创文章,可乐de数据分析之路
  9. 2020年Python文章盘点,我选出了个人TOP10

随机推荐

  1. android 获取图片
  2. android灵活布局
  3. Android IPC 通讯机制源码分析 二
  4. android典型代码系列(一)------android调
  5. Android中OkHttp的使用
  6. Android 微信SDK分享功能中的最全过程步
  7. Android的文本编解码工具类
  8. 【email】android邮件Email
  9. Android(三)Android SDK无法更新解决方式
  10. Android Animation动画(Frame-By-Frame An