SpringBoot的核心就是自动配置,而支持自动配置的是一个个starter项目。除了官方已有的starter,用户自己也可以根据规则自定义自己的starter项目。

自定义starter条件

自动化配置需满足以下条件:

  • 根据条件检查classpath下对应的类,也就是说需要提供对应可检查的类;
  • 当满足条件时能够生成定义的Bean,并注册到容器中去;
  • 能够自动配置项目所需要的配置;

自定义spring boot starter

这里通过maven项目管理工具进行starter的创建。首先我们需要创建一个简单的maven项目。这里我们以集成某短信服务为例,来创建一个项目。

创建maven项目

创建一个简单的maven项目,具体步骤省略。可通过intellj idea等IDE进行创建,也可通过maven命令进行创建。

目录结构如下:

. ├── pom.xml ├── spring-boot-starter-msg.iml └── src     ├── main     └── test

在pom.xml中引入SpringBoot自动化配置依赖spring-boot-autoconfigure:

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-autoconfigure</artifactId>     <version>2.1.5.RELEASE</version> </dependency>

定义Service服务类

定义Service服务类,有两个作用,一个为引入的项目本省的功能性服务,另外一个用来springboot自动配置时的判断依据。

这里定义一个MsgService的类。

package com.secbro2.msg;  import com.secbro2.utils.HttpClientUtils;  public class MsgService {      /**      * 访问发送短信的url地址      */     private String url;      /**      * 短信服务商提供的请求keyId      */     private String accessKeyId;      /**      * 短信服务商提供的KeySecret      */     private String accessKeySecret;      public MsgService(String url, String accessKeyId, String accessKeySecret) {         this.url = url;         this.accessKeyId = accessKeyId;         this.accessKeySecret = accessKeySecret;     }      public int sendMsg(String msg) {         // 调用http服务并发送消息,返回结果         return HttpClientUtils.sendMsg(url, accessKeyId, accessKeySecret, msg);     }      // 省略getter/setter方法 } 

其中MsgService用到了一个工具类HttpClientUtils。在HttpClientUtils中只简单打印了请求的参数信息。

package com.secbro2.utils;  public class HttpClientUtils {      public static int sendMsg(String url, String accessKeyId, String accessKeySecret, String msg) {         //TODO 调用指定url进行请求的业务逻辑         System.out.println("Http请求,url=" + url + ";accessKeyId=" + accessKeyId + ";accessKeySecret=" + accessKeySecret + ";msg=" + msg);         return 0;     } }

定义配置类

定义MsgProperties配置类,用于封装application.properties或application.yml中的基础配置。这里关于短信发送的配置前缀统一采用msg。

@ConfigurationProperties(prefix = "msg") public class MsgProperties {      /**      * 访问发送短信的url地址      */     private String url;      /**      * 短信服务商提供的请求keyId      */     private String accessKeyId;      /**      * 短信服务商提供的KeySecret      */     private String accessKeySecret;          // 其他参数定义     // 省略getter/setter方法  }

通过@ConfigurationProperties注解来进行对应的属性的装配。

创建自动化配置类

自动配置类就是一个普通的java类,通过不同的注解来对其赋予不同的功能。其中最核心的当然是@Configuration注解。