SpringBoot自定義啟動(dòng)器Starter流程詳解
一、背景
雖然Spring官方給我們提供了很多的啟動(dòng)器供我們使用
但有時(shí)候我們也會(huì)遇到某些特殊場(chǎng)景,這些啟動(dòng)器滿足不了
這個(gè)時(shí)候就需要自定義一個(gè)啟動(dòng)器供我們使用
二、自定義啟動(dòng)器
在之前學(xué)習(xí)Spring Boot的過程中,我們已經(jīng)對(duì)啟動(dòng)器有了一個(gè)大致的了解
Spring Boot實(shí)現(xiàn)某個(gè)功能,一般是引入對(duì)應(yīng)場(chǎng)景的啟動(dòng)器(一般不寫代碼,只是聲明這個(gè)啟動(dòng)器需要引用哪些依賴),然后這個(gè)啟動(dòng)器又有對(duì)應(yīng)的自動(dòng)配置包
1、創(chuàng)建一個(gè)啟動(dòng)器的自動(dòng)配置模塊
先寫和配置文件中配置項(xiàng)互相綁定的實(shí)體類
package com.decade.autoConfigure.pojo; import org.springframework.boot.context.properties.ConfigurationProperties; // 將這個(gè)類的屬性和系統(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; } }
再寫自己要實(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)綁定的類 @Autowired private TeamInfo teamInfo; public String testMethod() { return teamInfo.getWinnerName() + "今天早上,絕殺了" + teamInfo.getLoserName(); } }
接著,寫一個(gè)自動(dòng)配置類,向容器中放入組件
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è)類型的bean時(shí),才回去初始化這個(gè)bean @ConditionalOnMissingBean(TestService.class) public TestService testService() { TestService testService = new TestService(); return testService; } }
最后,在新版本的Spring Boot中為了確??蚣軉?dòng)時(shí)加載該配置類
我們需要在這個(gè)模塊的resource文件下
新建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件
然后在里面寫自己之前創(chuàng)建的自動(dòng)配置類
注意:老版可能是放在META-INF/spring.factories文件中
com.decade.autoConfigure.auto.AutoConfiguration
2、創(chuàng)建一個(gè)啟動(dòng)器模塊
不用寫任何業(yè)務(wù)代碼,只需要在pom文件中,引用之前的創(chuàng)建的自動(dòng)配置模塊
3、在業(yè)務(wù)模塊中引入啟動(dòng)器
如圖,引入我們自己定義的啟動(dòng)器
然后在yaml文件中設(shè)置好綁定的配置項(xiàng)
再寫一個(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ù)庫流程詳解
- SpringBoot熱部署啟動(dòng)關(guān)閉流程詳解
- SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析
- SpringBoot超詳細(xì)分析啟動(dòng)流程
- Spring?Boot面試必問之啟動(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-10MyBatis關(guān)聯(lián)查詢的實(shí)現(xiàn)
MyBatis可以通過定義多個(gè)表的關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)多表查詢,本文主要介紹了MyBatis關(guān)聯(lián)查詢的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11windows下使用 intellij idea 編譯 kafka 源碼環(huán)境
這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項(xiàng)目演示,需要的朋友可以參考下2021-10-10Mybatis-plus操作json字段實(shí)戰(zhàn)教程
這篇文章主要介紹了Mybatis-plus操作json字段實(shí)戰(zhàn)教程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02String.intern()作用與常量池關(guān)系示例解析
這篇文章主要為大家介紹了String.intern()作用與常量池關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Java之Error與Exception的區(qū)別案例詳解
這篇文章主要介紹了Java之Error與Exception的區(qū)別案例詳解,本篇文章通過簡(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í)例代碼),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04