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

SpringBoot手寫starter全過程

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

SpringBoot手寫starter

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

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

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

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

首先

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

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

先上代碼

service

import lombok.AllArgsConstructor;

/**
 * @author xxx
 */
@AllArgsConstructor  //全參構造器
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
 * 自動配置類
 */
@Configuration   //標注為配置類 源碼中可以看到 標注這個注解的類會被加載
@ConditionalOnClass(SplicingService.class)    // 該注解意思是 有“”splicingservice“”類才起作用 通俗來說就是你不注該服務類,就不會去注入下面的類
@EnableConfigurationProperties(SplicingServiceProperties.class)   //開啟配置文件
public class SplicingAutoConfiguration {

    @Resource
    private SplicingServiceProperties properties;     //注入配置文件
    
    @Bean
    @ConditionalOnMissingBean()     //該注解的意思是如果沒有發(fā)現(xiàn)service的bean就執(zhí)行新建一個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;
  }

然后最關鍵的配置文件 spring.factories

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

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

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

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

splicing:
  service :
    prefix : AAA
    suffix : BBB

寫一個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é)果:

大功告成,我們在拓展一下,給這個字符串拼接加一個開關enabled true的時候拼,flase就不拼

改動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
 * 自動配置類
 */
@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("", "");
    }
}

如果說這個開關新方法你寫在了最開始寫下面,那么一定會報錯,因為會出現(xiàn)兩個實例。

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

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

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

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

項目鏈接:

https://github.com/ZfPx51/mystarter

總結(jié)

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

相關文章

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

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

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

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

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

    Red?Hat?安裝JDK與IntelliJ?IDEA的詳細過程

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

    Hibernate validator使用以及自定義校驗器注解

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

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

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

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

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

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

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

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

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

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

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

    詳解Java包裝類及自動裝箱拆箱

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

最新評論

班玛县| 乌鲁木齐县| 盐城市| 晴隆县| 巨野县| 静海县| 加查县| 沙雅县| 长子县| 芦山县| 化隆| 东丽区| 三明市| 洪雅县| 察隅县| 尖扎县| 长泰县| 肃北| 醴陵市| 梁山县| 桦甸市| 宝鸡市| 兰西县| 和田县| 政和县| 张家川| 上饶县| 兴义市| 盐山县| 红原县| 灵石县| 达拉特旗| 佛学| 濉溪县| 崇阳县| 遂宁市| 台前县| 太谷县| 施甸县| 永新县| 渝北区|