自定義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、模式

啟動器隻用來做依賴導入;
專門寫一個自動配置子產品;
啟動器依賴自動配置,别人隻需要引入啟動器(starter)
二、代碼編寫
2.1、建立工程目錄
2.1.1、建立啟動器子產品工程目錄
選擇建立一個空工程。編寫好自己的名稱後,點選finish。我這邊的工程目錄命名為spring-boot-ftp-starter
按下圖箭頭訓示建立一個maven子產品
添加Module相關資訊
點選finish完成啟動器子產品的建立。
2.1.2、建立自動配置子產品工程目錄
再次點選加号,選擇new module。
2.2、将配置子產品添加到啟動類中
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的網頁。
這是Idea工具提示我們如果需要添加配置時的提示資訊,可以導入下面的這個依賴。
在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配置
在本Demo中需要添加的如下:
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.moss.starter.HelloServiceAutoConfiguration
2.4、将啟動器和自動配置安裝到Maven
點選右側Maven中兩個子產品下的install指令,将項目安裝到maven工程;
三、編寫測試項目,測試自定義starter
3.1、建立test工程
建立Spring Boot項目
由于之前在自定義starter中配置了@ConditionalOnWebApplication,是以在這裡需要勾選添加Spring Web相關的依賴。
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、啟動測試
啟動項目
打開浏覽器,在浏覽器中輸入URL:http://localhost:8080/hello
至此自定義starter已經實作了!!!