最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot手寫starter全過程

 更新時(shí)間:2026年05月17日 10:23:58   作者:臥槽甜  
本文主要介紹了如何手動(dòng)編寫SpringBoot的starter,包括創(chuàng)建項(xiàng)目、配置自動(dòng)配置類、編寫Properties文件、配置spring.factories文件等步驟,并通過測試項(xiàng)目驗(yàn)證其功能,同時(shí),還討論了如何實(shí)現(xiàn)開關(guān)控制等功能

SpringBoot手寫starter

相信大家在公司做項(xiàng)目時(shí)經(jīng)常會(huì)使用到公司自己封裝的依賴,里面就包括一些starter。

可以用于制成通用方法以及框架等方便維護(hù)以及后續(xù)開發(fā)。所以研究了一下如何自己去寫。

先小試牛刀(在一個(gè)maven項(xiàng)目下快速兩個(gè)創(chuàng)建springboot項(xiàng)目,一個(gè)用來寫starter,一個(gè)用來測試。

至于為什么這樣建是因?yàn)?,寫完的starter需要打包然后配置下maven私庫才能跨項(xiàng)目使用,所以現(xiàn)在同一個(gè)工程里做)

首先

創(chuàng)建完的項(xiàng)目就是這樣子。stater的命名是有規(guī)范的,像官方的就是把自定義名字放在最后。非官方的就是放在最前面。

先不講springboot源碼了,感興趣的可以自己去看看。

先上代碼

service

import lombok.AllArgsConstructor;

/**
 * @author xxx
 */
@AllArgsConstructor  //全參構(gòu)造器
public class SplicingService {

    private  String before;

    private  String after;

    public String Splicing(String word)
    {
        return before+ word + after;
    }
}

config

import com.abc.splicingspringbootstater.Service.SplicingService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

/**
 * @author xxx
 * 自動(dòng)配置類
 */
@Configuration   //標(biāo)注為配置類 源碼中可以看到 標(biāo)注這個(gè)注解的類會(huì)被加載
@ConditionalOnClass(SplicingService.class)    // 該注解意思是 有“”splicingservice“”類才起作用 通俗來說就是你不注該服務(wù)類,就不會(huì)去注入下面的類
@EnableConfigurationProperties(SplicingServiceProperties.class)   //開啟配置文件
public class SplicingAutoConfiguration {

    @Resource
    private SplicingServiceProperties properties;     //注入配置文件
    
    @Bean
    @ConditionalOnMissingBean()     //該注解的意思是如果沒有發(fā)現(xiàn)service的bean就執(zhí)行新建一個(gè)bean
    public SplicingService splicingService() {
        return new SplicingService(properties.getPrefix(), properties.getSuffix());
    }
}

接下來就是Properties類

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * @author xxx
 */
@Data
@ConfigurationProperties(prefix = "splicing.service")  //讀yml里的該路徑
public class SplicingServiceProperties {

    private  String prefix;

    private  String suffix;
  }

然后最關(guān)鍵的配置文件 spring.factories

在resource下創(chuàng)建文件夾META-INF,在新建文件spring.factories

里面的內(nèi)容就是 聲明我們要自動(dòng)配置的類(這些在源碼中都可以看到)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.abc.splicingspringbootstater.config.SplicingAutoConfiguration

最后就是使用test項(xiàng)目來測一下,首先就是在yml里寫上我們的配置

splicing:
  service :
    prefix : AAA
    suffix : BBB

寫一個(gè)controller 測試

import com.abc.splicingspringbootstater.Service.SplicingService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author xxx
 */
@RestController
public class TestController {

    @Resource
    private SplicingService splicingService;

    @RequestMapping("/test")
    public String getNewChar(String word)
    {
        return splicingService.Splicing(word);
    }
}

去網(wǎng)頁測一下可以看到結(jié)果:

大功告成,我們在拓展一下,給這個(gè)字符串拼接加一個(gè)開關(guān)enabled true的時(shí)候拼,flase就不拼

改動(dòng)starter的autoconfiguration

import com.abc.splicingspringbootstater.Service.SplicingService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

/**
 * @author xxx
 * 自動(dòng)配置類
 */
@Configuration
@ConditionalOnClass(SplicingService.class)
@EnableConfigurationProperties(SplicingServiceProperties.class)
public class SplicingAutoConfiguration {

    @Resource
    private SplicingServiceProperties properties;

    @Bean
    @ConditionalOnProperty(name = "splicing.service.enabled", havingValue = "true") // 該注解就是基于配置屬性生效,處理值為“true”
    public SplicingService splicingService2() {
        return new SplicingService(properties.getPrefix(), properties.getSuffix());
    }

    @Bean
    @ConditionalOnMissingBean()
    public SplicingService splicingService() {
        return new SplicingService("", "");
    }
}

如果說這個(gè)開關(guān)新方法你寫在了最開始寫下面,那么一定會(huì)報(bào)錯(cuò),因?yàn)闀?huì)出現(xiàn)兩個(gè)實(shí)例。

所以要把順序調(diào)換一下,如果yml里enabled是true這樣@ConditionalOnMissingBean()就會(huì)發(fā)現(xiàn)有實(shí)例而不在去新建,然后改一下yml再去網(wǎng)頁試試:

splicing:
  service :
    enabled : false
    prefix : AAA
    suffix : BBB

可以看到?jīng)]有拼接。

至此我們的stater就成功了。不太理解的可以去看看源碼(估計(jì)也看不懂- -),之后如果自己學(xué)的更厲害了,就可以寫一些框架級別的依賴文件(安全類,攔截器啥的),在去放到私庫里。共勉!

項(xiàng)目鏈接:

https://github.com/ZfPx51/mystarter

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot中json對象中對Long類型和String類型相互轉(zhuǎn)換

    springboot中json對象中對Long類型和String類型相互轉(zhuǎn)換

    與前端聯(lián)調(diào)接口時(shí),后端一些字段設(shè)計(jì)為Long類型,這樣就有可能導(dǎo)致前端缺失精度,這時(shí)候我們就需要將Long類型返回給前端時(shí)做數(shù)據(jù)類型轉(zhuǎn)換,本文主要介紹了springboot中json對象中對Long類型和String類型相互轉(zhuǎn)換,感興趣的可以了解一下
    2023-11-11
  • 解決try-catch捕獲異常信息后Spring事務(wù)失效的問題

    解決try-catch捕獲異常信息后Spring事務(wù)失效的問題

    這篇文章主要介紹了解決try-catch捕獲異常信息后Spring事務(wù)失效的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Red?Hat?安裝JDK與IntelliJ?IDEA的詳細(xì)過程

    Red?Hat?安裝JDK與IntelliJ?IDEA的詳細(xì)過程

    YUM是基于Red Hat的Linux發(fā)行版的一個(gè)強(qiáng)大而用戶友好的包管理工具,這篇文章主要介紹了Red?Hat安裝JDK與IntelliJ IDEA,需要的朋友可以參考下
    2023-08-08
  • Hibernate validator使用以及自定義校驗(yàn)器注解

    Hibernate validator使用以及自定義校驗(yàn)器注解

    這篇文章主要介紹了Hibernate validator使用以及自定義校驗(yàn)器注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾)

    Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾)

    這篇文章主要介紹了Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 淺談springboot一個(gè)service內(nèi)組件的加載順序

    淺談springboot一個(gè)service內(nèi)組件的加載順序

    這篇文章主要介紹了springboot一個(gè)service內(nèi)組件的加載順序,具有很好的參考價(jià)值,希望對大家有所幫助。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家
    2021-08-08
  • 新版SpringSecurity5.x使用與配置詳解

    新版SpringSecurity5.x使用與配置詳解

    Spring Security是一個(gè)強(qiáng)大且高度可定制的身份驗(yàn)證和訪問控制框架,本文主要介紹了新版SpringSecurity5.x使用與配置詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • java?JIT調(diào)優(yōu)的實(shí)現(xiàn)

    java?JIT調(diào)優(yōu)的實(shí)現(xiàn)

    JIT編譯器調(diào)優(yōu)方法包括啟用JIT日志、優(yōu)化熱點(diǎn)代碼、循環(huán)展開、內(nèi)聯(lián)優(yōu)化、逃逸分析以及使用性能分析工具等,本文主要介紹了java?JIT調(diào)優(yōu)的實(shí)現(xiàn),感興趣的可以了解一下
    2025-02-02
  • 詳解Java中日期格式化的實(shí)現(xiàn)方法與潛在問題解決

    詳解Java中日期格式化的實(shí)現(xiàn)方法與潛在問題解決

    這篇文章主要為大家詳細(xì)介紹了Java中日期格式化的實(shí)現(xiàn)方法與潛在問題解決的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-11-11
  • 詳解Java包裝類及自動(dòng)裝箱拆箱

    詳解Java包裝類及自動(dòng)裝箱拆箱

    這篇文章主要介紹了Java包裝類及自動(dòng)裝箱拆箱,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

盱眙县| 茌平县| 罗源县| 祁阳县| 佛山市| 尼玛县| 湖南省| 麟游县| 张家口市| 八宿县| 怀柔区| 平湖市| 茶陵县| 潍坊市| 牙克石市| 吴旗县| 安乡县| 通州区| 安远县| 循化| 建瓯市| 原平市| 潮安县| 普洱| 曲周县| 思茅市| 鹤峰县| 志丹县| 乐东| 玉环县| 赤城县| 鄂托克前旗| 南康市| 遂平县| 平南县| 凤台县| 四会市| 安塞县| 丹巴县| 舞阳县| 泗水县|