前言:SpringBoot功能強大的地方在於將常用的場景抽取成了一個個場景啟動器start,通過這些場景啟動器,再加上我們定製化的配置,便可以使用相關的功能。但是有些情況下,這些場景啟動器無法滿足我們的需求,需要自定義場景啟動器。
我們先看下SpringBoot幫我們封裝的場景啟動器
可以看出,在mybatis-spring-boot-starter這個場景啟動器中,並沒有程式碼
在他的pom檔案中我們找到它其實是依賴了一個mybatis-spring-boot-autoconfigure
在這個mybatis-spring-boot-autoconfigure中我們看到了mybatis相關的功能程式碼
所以我們得出結論:
- 啟動器(starter)是一個空的jar檔案,僅僅提供輔助性依賴管理,這些依賴可能用於自動裝配或其他類庫。
- 需要專門寫一個類似spring-boot-autoconfigure的配置模組
- 用的時候只需要引入啟動器starter,就可以使用自動配置了
如何自定義SpringBootStart
自定義Start步驟流程
1、建立一個父maven專案
專案名:springboot-customer-start
maven配置
1、kuroko-spring-boot-starter配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot_custome_starter</artifactId>
<groupId>com.kuroko.springboot</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>
啟動器(starter)是一個空的jar檔案,
僅僅提供輔助性依賴管理,
這些依賴需要自動裝配或其他類庫。
</description>
<artifactId>kuroko-spring-boot-starter</artifactId>
<dependencies>
<!--引入autoconfigure-->
<dependency>
<groupId>com.kuroko.springboot</groupId>
<artifactId>kuroko-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--如果當前starter 還需要其他的類庫就在這裡引用-->
</dependencies>
</project>
2、kuroko-spring-boot-autoconfigure配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot_custome_starter</artifactId>
<groupId>com.kuroko.springboot</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kuroko-spring-boot-autoconfigure</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--‐匯入配置檔案處理器,配置檔案進行繫結就會有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.0</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>
3、HelloAutoConfitguration
/***
* 給web應用自動新增一個首頁
*/
@Configuration
@ConditionalOnProperty(value = "kuroko.hello.name")
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnClass(StrUtil.class)
public class HelloAutoConfitguration {
@Autowired
HelloProperties helloProperties;
@Bean
public IndexController indexController(){
return new IndexController(helloProperties);
}
}
4、HelloProperties
@ConfigurationProperties("kuroko.hello")
public class HelloProperties {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
5、IndexController
@RestController
public class IndexController {
HelloProperties helloProperties;
public IndexController(HelloProperties helloProperties) {
this.helloProperties=helloProperties;
}
@RequestMapping("/")
public String index(){
return helloProperties.getName()+"歡迎您";
}
}
6、spring.factories
在 resources 下建立資料夾 META-INF 並在 META-INF 下建立檔案 spring.factories ,內容如下:
將配置好的kuroko-spring-boot-starter、kuroko-spring-boot-autoconfigure安裝成本地jar包
建立測試類test-springboot-start
引入自定義啟動類:kuroko-spring-boot-starter
配置配置檔案
完成!!!
本作品採用《CC 協議》,轉載必須註明作者和本文連結