整體項目結構
一、開發autoconfigure模塊
autoconfigure用於在starter初始化得時候,加載配置配置文件或者執行一些指定的功能。
(1)autoconfigure模塊需要的需要三個固定的依賴
<!-- 導入SpringBoot WEB開發環境 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 用於開發starter:自動配置註解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- 用於開發starter:開發自定義提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
(2)編寫一個spring.factories文件。它指定當autoconfigure被引入時,會加載下面配置的AutoConfigureConfig這個類。
#用逗號隔開
org.springframework.boot.autoconfigure.EnableAutoConfiguration
=com.zhoutianyu.learnspringboot.config.AutoConfigureConfig
@Configuration註解表明它是一個配置類。它會初始化一個SystemInit類,然後調用此類的init方法。
@EnableConfigurationProperties這個註解將DemoProperties文件引入Spring容器。
@Configuration
@ConditionalOnClass(SystemInit.class)
@EnableConfigurationProperties(DemoProperties.class)
public class AutoConfigureConfig {
@Bean(initMethod = "init")
@ConditionalOnMissingBean
public SystemInit systemInit() {
return new SystemInit();
}
}
@ConfigurationProperties(prefix = "demo")
@Data
public class DemoProperties {
private String message;
}
public class SystemInit {
public void init() {
System.out.println("SystemInit類正在始化中....");
}
}
二、開發starter模塊
starter模塊就是引入上面得autoconfigure模塊即可。
<dependencies>
<!-- starter項目導入最基本的SpringBoot依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- 導入自動配置JAR-->
<dependency>
<groupId>com.zhoutianyu</groupId>
<artifactId>demo-spring-boot-autoconfigure</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
三、使用自定義的starter
最後,創建一個SpringBoot項目。它導入我們得自定義starter。
<!-- 導入自定義starter-->
<dependency>
<groupId>com.zhoutianyu</groupId>
<artifactId>demo-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
我們在application.yml配置文件裏,配置第一步中的DemoProperties類。
server:
port: 8081
...
demo:
message: hello-starter
最後,編寫一個Controller,使用DemoProperties。
@RestController
@RequiredArgsConstructor
public class UserController {
private final DemoProperties properties;
@GetMapping(value = "/get")
public String function() {
return properties.getMessage();
}
}
啓動項目,並訪問http://localhost:8081/study/springboot/get ,返回與application.yml中指定配置,說明集成自定義SpringBoot-starter成功。
四、源碼下載
本章節項目源碼:點我下載源代碼