天天看點

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

自定義starter實作

  • 一、starter概述
    • 1.1、這個場景需要使用到的依賴是什麼?
    • 1.2、如何編寫自動配置?
    • 1.3、模式
  • 二、代碼編寫
    • 2.1、建立工程目錄
      • 2.1.1、建立啟動器子產品工程目錄
      • 2.1.2、建立自動配置子產品工程目錄
    • 2.2、将配置子產品添加到啟動類中
    • 2.3、編寫自動配置子產品
      • 2.3.1、删除子產品中多餘的内容
      • 2.3.2、添加HelloService類
      • 2.3.3、添加HelloProperties配置類
      • 2.3.4、添加HelloServiceAutoConfiguration自動配置類
      • 2.3.5、添加spring.factories檔案
    • 2.4、将啟動器和自動配置安裝到Maven
  • 三、編寫測試項目,測試自定義starter
    • 3.1、建立test工程
    • 3.2、将自定義starter引入到test工程中
    • 3.3、在application.yml配置檔案中添加以下配置
    • 3.4、編寫測試controller
    • 3.5、啟動測試

一、starter概述

1.1、這個場景需要使用到的依賴是什麼?

1.2、如何編寫自動配置?

@Configuration	//指定這個類是一個配置類
@ConfigurationOnXXX	//在指定條件成立的情況下自動配置類生效
@AutoConfigureAfter	//指定配置類的順序
@Bean	//給Spring容器中添加元件

@ConfigurationProperties	//結合XXXProperties類來綁定配置
@EnableConfigurationProperties	//生效某個配置類,并加入到容器中
           

自動配置類應該如何加載?

需要将啟動就加載的自動配置類,配置在META-INF/spring- factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.moss.starter.config.FtpConfiguration
           

1.3、模式

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

啟動器隻用來做依賴導入;

專門寫一個自動配置子產品;

啟動器依賴自動配置,别人隻需要引入啟動器(starter)

二、代碼編寫

2.1、建立工程目錄

2.1.1、建立啟動器子產品工程目錄

選擇建立一個空工程。編寫好自己的名稱後,點選finish。我這邊的工程目錄命名為spring-boot-ftp-starter

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

按下圖箭頭訓示建立一個maven子產品

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

添加Module相關資訊

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

點選finish完成啟動器子產品的建立。

2.1.2、建立自動配置子產品工程目錄

再次點選加号,選擇new module。

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

2.2、将配置子產品添加到啟動類中

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

2.3、編寫自動配置子產品

2.3.1、删除子產品中多餘的内容

删除以下五部分的内容:

  • 1.删除Spring Boot項目的啟動類;
  • 2.删除/resource目錄下的application.properties檔案;
  • 3.删除/test目錄下的測試相關檔案;
  • 4.删除pom.xml依賴管理中的test依賴;
  • 5.删除pom.xml依賴管理中的打包插件;
    【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

2.3.2、添加HelloService類

package com.moss.starter;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

/**
 * @author lwj
 */
@Data
public class HelloService {

    @Autowired
    private HelloProperties helloProperties;

    public String sayHello(String name) {
        return helloProperties.getPrefix() + "|" + name + "|" + helloProperties.getSuffix();
    }

}

           

2.3.3、添加HelloProperties配置類

在添加@ConfigurationProperties(prefix = “moss-ftp”)注解的時候,會跳出警告提示,點選右側的提示,會跳轉到一個Spring的網頁。

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

這是Idea工具提示我們如果需要添加配置時的提示資訊,可以導入下面的這個依賴。

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

在pom.xml中引入該依賴

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>
           
package com.moss.starter;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@ConfigurationProperties(prefix = "moss-ftp")
public class HelloProperties {

    private String prefix;

    private String suffix;
}

           

2.3.4、添加HelloServiceAutoConfiguration自動配置類

package com.moss.starter;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {

    @Autowired
    public HelloProperties helloProperties;

    @Bean
    public HelloService helloService() {
        HelloService helloService = new HelloService();
        helloService.setHelloProperties(helloProperties);
        return helloService;
    }
}

           

2.3.5、添加spring.factories檔案

在這裡我們可以參照spring的autoconfigure配置

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

在本Demo中需要添加的如下:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.moss.starter.HelloServiceAutoConfiguration
           

2.4、将啟動器和自動配置安裝到Maven

點選右側Maven中兩個子產品下的install指令,将項目安裝到maven工程;

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

三、編寫測試項目,測試自定義starter

3.1、建立test工程

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

建立Spring Boot項目

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

由于之前在自定義starter中配置了@ConditionalOnWebApplication,是以在這裡需要勾選添加Spring Web相關的依賴。

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter
【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

3.2、将自定義starter引入到test工程中

在test項目的pom.xml依賴配置中添加自定義starter依賴。

<dependency>
		<groupId>com.moss.starter</groupId>
		<artifactId>moss-ftp-spring-boot-starter</artifactId>
		<version>1.0-SNAPSHOT</version>
</dependency>
           

3.3、在application.yml配置檔案中添加以下配置

moss-ftp:
  prefix: China
  suffix: Hello
           

3.4、編寫測試controller

建立HelloController類

package com.moss.springboot;

import com.moss.starter.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Autowired
    private HelloService helloService;

    @GetMapping("/hello")
    public String hello() {
        return helloService.sayHello("李四");
    }
}

           

3.5、啟動測試

啟動項目

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

打開浏覽器,在浏覽器中輸入URL:http://localhost:8080/hello

【SpringBoot】自定義starter實作詳解一、starter概述二、代碼編寫三、編寫測試項目,測試自定義starter

至此自定義starter已經實作了!!!

繼續閱讀