首頁 > 軟體

SpringBoot自定義啟動器Starter流程詳解

2022-11-15 14:00:33

一、背景

雖然Spring官方給我們提供了很多的啟動器供我們使用

但有時候我們也會遇到某些特殊場景,這些啟動器滿足不了

這個時候就需要自定義一個啟動器供我們使用

二、自定義啟動器

在之前學習Spring Boot的過程中,我們已經對啟動器有了一個大致的瞭解

Spring Boot實現某個功能,一般是引入對應場景的啟動器(一般不寫程式碼,只是宣告這個啟動器需要參照哪些依賴),然後這個啟動器又有對應的自動設定包

1、建立一個啟動器的自動設定模組

先寫和組態檔中設定項互相繫結的實體類

package com.decade.autoConfigure.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
// 將這個類的屬性和系統組態檔中的屬性進行繫結
@ConfigurationProperties(prefix = "team")
public class TeamInfo {
    private String winnerName;
    private String loserName;
    public String getWinnerName() {
        return winnerName;
    }
    public void setWinnerName(String winnerName) {
        this.winnerName = winnerName;
    }
    public String getLoserName() {
        return loserName;
    }
    public void setLoserName(String loserName) {
        this.loserName = loserName;
    }
}

再寫自己要實現的業務邏輯

package com.decade.autoConfigure.service;
import com.decade.autofigure.pojo.TeamInfo;
import org.springframework.beans.factory.annotation.Autowired;
public class TestService {
	// 引入和yaml檔案中設定項繫結的類
    @Autowired
    private TeamInfo teamInfo;
    public String testMethod() {
        return teamInfo.getWinnerName() + "今天早上,絕殺了" + teamInfo.getLoserName();
    }
}

接著,寫一個自動設定類,向容器中放入元件

package com.decade.autoConfigure.auto;
import com.decade.autofigure.pojo.TeamInfo;
import com.decade.autofigure.service.TestService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
// 使得TeamInfo中的@ConfigurationProperties註解生效,將TeamInfo註冊到容器中
@EnableConfigurationProperties(TeamInfo.class)
@Configuration
public class AutoConfiguration {
    @Bean
    // 只有容器中不存在TestService這個型別的bean時,才回去初始化這個bean
    @ConditionalOnMissingBean(TestService.class)
    public TestService testService() {
        TestService testService = new TestService();
        return testService;
    }
}

最後,在新版本的Spring Boot中為了確保框架啟動時載入該設定類

我們需要在這個模組的resource檔案下

新建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports檔案

然後在裡面寫自己之前建立的自動設定類

注意:老版可能是放在META-INF/spring.factories檔案中

com.decade.autoConfigure.auto.AutoConfiguration

2、建立一個啟動器模組

不用寫任何業務程式碼,只需要在pom檔案中,參照之前的建立的自動設定模組

3、在業務模組中引入啟動器

如圖,引入我們自己定義的啟動器

然後在yaml檔案中設定好繫結的設定項

再寫一個測試方法進行測試即可

package com.decade;
import com.decade.autoConfigure.service.TestService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
@Slf4j
class SpringbootWebApplicationTests {
    @Autowired
    private TestService testService;
    @Test
    public void testCustomStarter() {
        System.out.println(testService.testMethod());
    }
}

測試方法結果如下圖

到此這篇關於SpringBoot自定義啟動器Starter流程詳解的文章就介紹到這了,更多相關SpringBoot自定義Starter內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com