SpringBoot自定義啟動(dòng)器Starter流程詳解
一、背景
雖然Spring官方給我們提供了很多的啟動(dòng)器供我們使用
但有時(shí)候我們也會(huì)遇到某些特殊場(chǎng)景,這些啟動(dòng)器滿(mǎn)足不了
這個(gè)時(shí)候就需要自定義一個(gè)啟動(dòng)器供我們使用
二、自定義啟動(dòng)器
在之前學(xué)習(xí)Spring Boot的過(guò)程中,我們已經(jīng)對(duì)啟動(dòng)器有了一個(gè)大致的了解
Spring Boot實(shí)現(xiàn)某個(gè)功能,一般是引入對(duì)應(yīng)場(chǎng)景的啟動(dòng)器(一般不寫(xiě)代碼,只是聲明這個(gè)啟動(dòng)器需要引用哪些依賴(lài)),然后這個(gè)啟動(dòng)器又有對(duì)應(yīng)的自動(dòng)配置包
1、創(chuàng)建一個(gè)啟動(dòng)器的自動(dòng)配置模塊
先寫(xiě)和配置文件中配置項(xiàng)互相綁定的實(shí)體類(lèi)
package com.decade.autoConfigure.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
// 將這個(gè)類(lèi)的屬性和系統(tǒng)配置文件中的屬性進(jìn)行綁定
@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;
}
}再寫(xiě)自己要實(shí)現(xiàn)的業(yè)務(wù)邏輯
package com.decade.autoConfigure.service;
import com.decade.autofigure.pojo.TeamInfo;
import org.springframework.beans.factory.annotation.Autowired;
public class TestService {
// 引入和yaml文件中配置項(xiàng)綁定的類(lèi)
@Autowired
private TeamInfo teamInfo;
public String testMethod() {
return teamInfo.getWinnerName() + "今天早上,絕殺了" + teamInfo.getLoserName();
}
}接著,寫(xiě)一個(gè)自動(dòng)配置類(lèi),向容器中放入組件
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注冊(cè)到容器中
@EnableConfigurationProperties(TeamInfo.class)
@Configuration
public class AutoConfiguration {
@Bean
// 只有容器中不存在TestService這個(gè)類(lèi)型的bean時(shí),才回去初始化這個(gè)bean
@ConditionalOnMissingBean(TestService.class)
public TestService testService() {
TestService testService = new TestService();
return testService;
}
}最后,在新版本的Spring Boot中為了確保框架啟動(dòng)時(shí)加載該配置類(lèi)
我們需要在這個(gè)模塊的resource文件下
新建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件
然后在里面寫(xiě)自己之前創(chuàng)建的自動(dòng)配置類(lèi)
注意:老版可能是放在META-INF/spring.factories文件中
com.decade.autoConfigure.auto.AutoConfiguration
2、創(chuàng)建一個(gè)啟動(dòng)器模塊
不用寫(xiě)任何業(yè)務(wù)代碼,只需要在pom文件中,引用之前的創(chuàng)建的自動(dòng)配置模塊

3、在業(yè)務(wù)模塊中引入啟動(dòng)器
如圖,引入我們自己定義的啟動(dòng)器

然后在yaml文件中設(shè)置好綁定的配置項(xiàng)
再寫(xiě)一個(gè)測(cè)試方法進(jìn)行測(cè)試即可
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());
}
}測(cè)試方法結(jié)果如下圖

到此這篇關(guān)于SpringBoot自定義啟動(dòng)器Starter流程詳解的文章就介紹到這了,更多相關(guān)SpringBoot自定義Starter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring?Boot實(shí)現(xiàn)第一次啟動(dòng)時(shí)自動(dòng)初始化數(shù)據(jù)庫(kù)流程詳解
- SpringBoot熱部署啟動(dòng)關(guān)閉流程詳解
- SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析
- SpringBoot超詳細(xì)分析啟動(dòng)流程
- Spring?Boot面試必問(wèn)之啟動(dòng)流程知識(shí)點(diǎn)詳解
- Springboot2.6.x的啟動(dòng)流程與自動(dòng)配置詳解
- springboot中swagger快速啟動(dòng)流程
- SpringBoot中如何啟動(dòng)Tomcat流程
- Spring Boot 啟動(dòng)流程解析
相關(guān)文章
利用SpringMVC接收復(fù)雜對(duì)象和多個(gè)文件(前端使用JQuery)
這篇文章主要介紹了利用SpringMVC接收復(fù)雜對(duì)象和多個(gè)文件(前端使用JQuery),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
MyBatis關(guān)聯(lián)查詢(xún)的實(shí)現(xiàn)
MyBatis可以通過(guò)定義多個(gè)表的關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)多表查詢(xún),本文主要介紹了MyBatis關(guān)聯(lián)查詢(xún)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
windows下使用 intellij idea 編譯 kafka 源碼環(huán)境
這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項(xiàng)目演示,需要的朋友可以參考下2021-10-10
Mybatis-plus操作json字段實(shí)戰(zhàn)教程
這篇文章主要介紹了Mybatis-plus操作json字段實(shí)戰(zhàn)教程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
SpringBoot整合Kafka工具類(lèi)的詳細(xì)代碼
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費(fèi)者在網(wǎng)站中的所有動(dòng)作流數(shù)據(jù),這篇文章主要介紹了SpringBoot整合Kafka工具類(lèi)的代碼詳解,需要的朋友可以參考下2022-09-09
String.intern()作用與常量池關(guān)系示例解析
這篇文章主要為大家介紹了String.intern()作用與常量池關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Java之Error與Exception的區(qū)別案例詳解
這篇文章主要介紹了Java之Error與Exception的區(qū)別案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
超簡(jiǎn)潔java實(shí)現(xiàn)雙色球若干注隨機(jī)號(hào)碼生成(實(shí)例代碼)
這篇文章主要介紹了超簡(jiǎn)潔java實(shí)現(xiàn)雙色球若干注隨機(jī)號(hào)碼生成(實(shí)例代碼),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04

