国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot之自定義starter

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot之自定義starter。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、什么是SpringBoot starter機(jī)制

二、為什么要自定義starter

三、什么時(shí)候需要?jiǎng)?chuàng)建自定義starter

四、自動(dòng)加載核心注解說(shuō)明

五、自定義starter的開(kāi)發(fā)流程

案例一:為短信發(fā)送功能創(chuàng)建一個(gè)starter

案例二:AOP方式統(tǒng)一服務(wù)日志


?一、什么是SpringBoot starter機(jī)制

SpringBoot中的starter是一種非常重要的機(jī)制(自動(dòng)化配置),能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn)starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動(dòng)掃描到要加載的信息并啟動(dòng)相應(yīng)的默認(rèn)配置。

starter讓我們擺脫了各種依賴庫(kù)的處理,需要配置各種信息的困擾。SpringBoot會(huì)自動(dòng)通過(guò)classpath路徑下的類(lèi)發(fā)現(xiàn)需要的Bean,并注冊(cè)進(jìn)IOC容器。SpringBoot提供了針對(duì)日常企業(yè)應(yīng)用研發(fā)各種場(chǎng)景的spring-boot-starter依賴模塊。

所有這些依賴模塊都遵循著約定成俗的默認(rèn)配置,并允許我們調(diào)整這些配置,即遵循“約定大于配置”的理念。

二、為什么要自定義starter

在我們的日常開(kāi)發(fā)工作中,經(jīng)常會(huì)有一些獨(dú)立于業(yè)務(wù)之外的配置模塊,我們經(jīng)常將其放到一個(gè)特定的包下,然后如果另一個(gè)工程需要復(fù)用這塊功能的時(shí)候,需要將代碼硬拷貝到另一個(gè)工程,重新集成一遍,麻煩至極。

如果我們將這些可獨(dú)立于業(yè)務(wù)代碼之外的功配置模塊封裝成一個(gè)個(gè)starter,復(fù)用的時(shí)候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動(dòng)裝配,簡(jiǎn)直不要太爽

三、什么時(shí)候需要?jiǎng)?chuàng)建自定義starter

在我們的日常開(kāi)發(fā)工作中,可能會(huì)需要開(kāi)發(fā)一個(gè)通用模塊,以供其它工程復(fù)用。SpringBoot就為我們提供這樣的功能機(jī)制,我們可以把我們的通用模塊封裝成一個(gè)個(gè)starter,這樣其它工程復(fù)用的時(shí)候只需要在pom中引用依賴即可,由SpringBoot為我們完成自動(dòng)裝配。

常見(jiàn)場(chǎng)景:
? ?1.通用模塊-短信發(fā)送模塊
? ?2.基于AOP技術(shù)實(shí)現(xiàn)日志切面

? ?3.分布式雪花ID,Long-->string,解決精度問(wèn)題
? ? ?jackson2/fastjson

? ?4.微服務(wù)項(xiàng)目的數(shù)據(jù)庫(kù)連接池配置
? ?5.微服務(wù)項(xiàng)目的每個(gè)模塊都要訪問(wèn)redis數(shù)據(jù)庫(kù),每個(gè)模塊都要配置redisTemplate
? ? ?也可以通過(guò)starter解決

四、自動(dòng)加載核心注解說(shuō)明

starter 組件開(kāi)發(fā),核心是自動(dòng)注解類(lèi)的注解順序,即根據(jù)條件進(jìn)行注解

SpringBoot之自定義starter

?關(guān)于自動(dòng)加載核心注解,詳情可見(jiàn):https://blog.csdn.net/qq_19782697/article/details/100727302

五、自定義starter的開(kāi)發(fā)流程

那么前面對(duì)自定義 starter 機(jī)制簡(jiǎn)單介紹了一下,接下來(lái)就進(jìn)入正題!

自定義starter的開(kāi)發(fā)流程:
? ?1.創(chuàng)建Starter項(xiàng)目(spring-initl 2.1.14)
? ?2.定義Starter需要的配置類(lèi)(Properties)
? ?3.編寫(xiě)Starter項(xiàng)目的業(yè)務(wù)功能
? ?4.編寫(xiě)自動(dòng)配置類(lèi)
? ?5.編寫(xiě)spring.factories文件加載自動(dòng)配置類(lèi)
? ?6.打包安裝
? ?7.其它項(xiàng)目引用

案例一:為短信發(fā)送功能創(chuàng)建一個(gè)starter

1.創(chuàng)建Starter項(xiàng)目

SpringBoot之自定義starter

?SpringBoot之自定義starter

?starter項(xiàng)目和SpringBoot工程結(jié)構(gòu)沒(méi)有什么區(qū)別,下面就把一些特殊的要求羅列一下
? ? ?1.1.命名規(guī)范
? ? ? ?SpringBoot官方命名方式
? ? ? ?格式:spring-boot-starter-{模塊名}
? ? ? ?舉例:spring-boot-starter-web
? ? ? ?自定義命名方式
? ? ? ?格式:{模塊名}-spring-boot-starter
? ? ? ?舉例:mystarter-spring-boot-starter
? ? ?1.2.必須引入的依賴

<!--表示兩個(gè)項(xiàng)目之間依賴不傳遞;不設(shè)置optional或者optional是false,表示傳遞依賴-->
       <!--例如:project1依賴a.jar(optional=true),project2依賴project1,則project2不依賴a.jar-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-configuration-processor</artifactId>
           <optional>true</optional>
       </dependency> 

如果我們剛剛創(chuàng)建項(xiàng)目時(shí)選擇了Spring Configuration Processor,在pom.xml文件中就會(huì)有上面的依賴

2.編寫(xiě)相關(guān)屬性類(lèi)(XxxProperties):SmsProperties.java

--@ConfigurationProperties注解基本用法
? ? ? ?前綴定義了哪些外部屬性將綁定到類(lèi)的字段上
? ? ? ?根據(jù) Spring Boot 寬松的綁定規(guī)則,類(lèi)的屬性名稱(chēng)必須與外部屬性的名稱(chēng)匹配
? ? ? ?我們可以簡(jiǎn)單地用一個(gè)值初始化一個(gè)字段來(lái)定義一個(gè)默認(rèn)值
? ? ? ?類(lèi)本身可以是包私有的
? ? ? ?類(lèi)的字段必須有公共 setter 方法 ??

? ? ?注意:SmsProperties代碼寫(xiě)完后會(huì)報(bào)如下錯(cuò)誤,這是正常的,因?yàn)?br> ? ? ? ? ?還有配置類(lèi)AutoConfig和一個(gè)注解@EnableConfigurationProperties沒(méi)有加
? ? ? ? ?(Not registered via @EnableConfigurationProperties or marked as Spring component)

package com.zking.zzcloudspringbootstarter.sms;

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

import java.io.Serializable;

@ConfigurationProperties("zzcloud.sms")
public class SmsProperties implements Serializable {

    private String accessKeyId;//訪問(wèn)ID、即帳號(hào)
    private String accessKeySecret;//訪問(wèn)憑證,即密碼

    public String getAccessKeyId() {
        return accessKeyId;
    }

    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    public String getAccessKeySecret() {
        return accessKeySecret;
    }

    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }
}

3.編寫(xiě)Starter項(xiàng)目的業(yè)務(wù)功能?
ISmsService和SmsServiceImpl相關(guān)代碼如下:

package com.zking.zzcloudspringbootstarter.sms;

public interface ISmsService {

    /**
     * 發(fā)送短信
     *
     * @param phone        要發(fā)送的手機(jī)號(hào)
     * @param signName     短信簽名-在短信控制臺(tái)中找
     * @param templateCode 短信模板-在短信控制臺(tái)中找
     * @param data         要發(fā)送的內(nèi)容
     */
    void send(String phone, String signName, String templateCode, String data);
}
package com.zking.zzcloudspringbootstarter.sms;


import com.zking.zzcloudspringbootstarter.sms.ISmsService;

public class SmsServiceImpl implements ISmsService {

    private String accessKeyId;//訪問(wèn)ID、即帳號(hào)
    private String accessKeySecret;//訪問(wèn)憑證,即密碼

    public SmsServiceImpl(String accessKeyId, String accessKeySecret) {
        this.accessKeyId = accessKeyId;
        this.accessKeySecret = accessKeySecret;
    }

    @Override
    public void send(String phone, String signName, String templateCode, String data) {
        System.out.println("接入短信系統(tǒng),accessKeyId=" + accessKeyId + ",accessKeySecret=" + accessKeySecret);
        System.out.println("短信發(fā)送,phone=" + phone + ",signName=" + signName + ",templateCode=" + templateCode + ",data=" + data);
    }
}

4.編寫(xiě)自動(dòng)配置類(lèi)AutoConfig?
? ? 4.1. @Configuration:
? ? ? ?定義一個(gè)配置類(lèi)
? ? 4.2. @EnableConfigurationProperties:
? ? ? ?@EnableConfigurationProperties注解的作用是@ConfigurationProperties注解生效。
? ? ? ?如果只配置@ConfigurationProperties注解,在IOC容器中是獲取不到properties配置文? ? ? ? ? ?件轉(zhuǎn)化的bean的?

package com.zking.zzcloudspringbootstarter.config;

import com.zking.zzcloudspringbootstarter.sms.SmsProperties;
import com.zking.zzcloudspringbootstarter.sms.SmsServiceImpl;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

@Configuration //表示這個(gè)類(lèi)為配置類(lèi)
@EnableConfigurationProperties({SmsProperties.class})
public class SmsAutoConfig {

    @Resource
    private SmsProperties smsProperties;

    @Bean
    public SmsServiceImpl smsServiceImpl(){

        return new SmsServiceImpl(smsProperties.getAccessKeyId(),smsProperties.getAccessKeySecret());
    }

}

5.編寫(xiě)spring.factories文件加載自動(dòng)配置類(lèi)
? ? ?5.1.在resources下新建META-INF文件夾,然后創(chuàng)建spring.factories文件
? ? ?5.2.在該文件中加入如下配置,該配置指定上步驟中定義的配置類(lèi)為自動(dòng)裝配的配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.zking.zzcloudspringbootstarter.config.SmsAutoConfig

注1:其中AutoConfig是starter配置文件的類(lèi)限定名,多個(gè)之間逗號(hào)分割,還可以\進(jìn)行轉(zhuǎn)義即相當(dāng)于去掉后面換行和空格符號(hào),如下所示

?# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,\
  com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

6.打包安裝

打包時(shí)需要注意一下,SpringBoot項(xiàng)目打包的JAR是可執(zhí)行JAR,它的類(lèi)放在BOOT-INF目錄下,如果直接作為其他項(xiàng)目的依賴,會(huì)找不到類(lèi)??梢酝ㄟ^(guò)修改pom文件來(lái)解決,代碼如下:

<plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>
      <classifier>exec</classifier>
   </configuration>
</plugin>

SpringBoot之自定義starter

打包前,先查看我們maven倉(cāng)庫(kù)的位置,并設(shè)置到自己本地倉(cāng)庫(kù)位置中去,再打包。過(guò)程如下:

SpringBoot之自定義starter

SpringBoot之自定義starter

成功后,我們可以發(fā)現(xiàn)我們本地倉(cāng)庫(kù)就會(huì)有剛剛我們打包完的項(xiàng)目:

SpringBoot之自定義starter

到這里為止,我們的整個(gè)自定義starter的準(zhǔn)備工作就做完了,如下是我的整個(gè)自定義starter文件的結(jié)構(gòu):SpringBoot之自定義starter

7.在其他項(xiàng)目中的應(yīng)用?

7.1.首先在其他項(xiàng)目的pom.xml中引入相關(guān)依賴:

SpringBoot之自定義starter

?7.2.在application.yml文件中添加配置

SpringBoot之自定義starter

?為了展示效果,我們寫(xiě)一個(gè)測(cè)試類(lèi),看能否看到我們想要的效果,測(cè)試代碼如下:

package com.zking.springboot02.service.impl;

import com.zking.springboot02.Springboot02Application;
import com.zking.springboot02.model.Book;
import com.zking.springboot02.service.IBookService;
import com.zking.springboot02.utils.PageBean;
import com.zking.zzcloudspringbootstarter.sms.ISmsService;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import javax.annotation.Resource;
import java.util.List;

@SpringBootTest(classes = Springboot02Application.class)
class SmsServiceImplTest {

    @Resource
    private ISmsService smsService;

    @BeforeEach
    void setUp() {

    }

    @AfterEach
    void tearDown() {
    }

    @Test
    void testRedis() {
        smsService.send("15575488448","pengying","1","小彭不會(huì)禿頭加油干!");
    }
}

控制臺(tái)效果如下:

SpringBoot之自定義starter

?如果控制臺(tái)有如上效果,說(shuō)明我們整個(gè)自定義starter的過(guò)程就成功了!

案例二:AOP方式統(tǒng)一服務(wù)日志

原先實(shí)現(xiàn)統(tǒng)一日志都是放到每個(gè)工程中以AOP方式實(shí)現(xiàn),現(xiàn)在有了starter方式,就可以將公司的日志規(guī)范集中到這里來(lái)統(tǒng)一管理。

這里我們使用之前創(chuàng)建好的項(xiàng)目進(jìn)行案例二的編寫(xiě),步驟與上同理:

1.導(dǎo)入aop相關(guān)依賴

<!--aop相關(guān)依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.編寫(xiě)相關(guān)屬性類(lèi)(XxxProperties):WebLogProperties.java

package com.zking.zzcloudspringbootstarter.sms;

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

import java.io.Serializable;

@ConfigurationProperties("zzcloud.weblog")
public class WebLogProperties implements Serializable {

    public Boolean enabled;  //Boolean封裝類(lèi),默認(rèn)為null

    public Boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(Boolean enabled) {
        this.enabled = enabled;
    }
}

3.編寫(xiě)Starter項(xiàng)目的業(yè)務(wù)功能?

package com.zking.zzcloudspringbootstarter.weblog;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

@Aspect
@Component
@Slf4j
public class WebLogAspect {
    //@Pointcut("execution(public * com.zking..controller.*.*(..))")
    @Pointcut("execution(* *..*Controller.*(..))")
    public void webLog(){}

    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到請(qǐng)求,記錄請(qǐng)求內(nèi)容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        // 記錄下請(qǐng)求內(nèi)容
        log.info("開(kāi)始服務(wù):{}", request.getRequestURL().toString());
        log.info("客戶端IP :{}" , request.getRemoteAddr());
        log.info("參數(shù)值 :{}", Arrays.toString(joinPoint.getArgs()));
    }

    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 處理完請(qǐng)求,返回內(nèi)容
        log.info("返回值 : {}" , ret);
    }
}

4.編寫(xiě)自動(dòng)配置類(lèi)AutoConfig?

4.1.@ConditionalOnProperty(prefix = "zzcloud.weblog",value = "enabled", matchIfMissing = true):
matchIfMissing屬性:默認(rèn)情況下matchIfMissing為false,也就是說(shuō)如果未進(jìn)行屬性配置,則自動(dòng)配置不生效。如果matchIfMissing為true,則表示如果沒(méi)有對(duì)應(yīng)的屬性配置,則自動(dòng)配置默認(rèn)生效
4.2.@ConditionalOnMissingBean:
在@bean定義上,它的作用就是在容器加載它作用的bean時(shí),檢查容器中是否存在目標(biāo)類(lèi)型(ConditionalOnMissingBean注解的value值)的bean了,如果存在這跳過(guò)原始bean的BeanDefinition加載動(dòng)作。

package com.zking.zzcloudspringbootstarter.config;

import com.zking.zzcloudspringbootstarter.sms.SmsProperties;
import com.zking.zzcloudspringbootstarter.sms.SmsServiceImpl;
import com.zking.zzcloudspringbootstarter.sms.WebLogProperties;
import com.zking.zzcloudspringbootstarter.weblog.WebLogAspect;
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;

@Configuration //表示這個(gè)類(lèi)為配置類(lèi)
@EnableConfigurationProperties({WebLogProperties.class})
@ConditionalOnProperty(prefix = "zzcloud.weblog",value = "enabled",matchIfMissing = true)
public class WebLogAutoConfig {

    @Bean
    @ConditionalOnMissingBean
    public WebLogAspect webLogAspect(){
        return new WebLogAspect();
    }

}

5.編寫(xiě)spring.factories文件加載自動(dòng)配置類(lèi)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.zking.zzcloudspringbootstarter.config.SmsAutoConfig,\
  com.zking.zzcloudspringbootstarter.config.WebLogAutoConfig 

6.打包,操作同上

7.在其他項(xiàng)目中引用

7.1.導(dǎo)入依賴,由于這里我們使用的是之前的那個(gè)項(xiàng)目,這里就不需要重復(fù)導(dǎo)入依賴了

7.2.在application.yml文件中添加配置

SpringBoot之自定義starter

?測(cè)試如下:這里我用該項(xiàng)目里的方法進(jìn)行測(cè)試

SpringBoot之自定義starter

?如果我不使用日志,效果如下:

SpringBoot之自定義starter

反之如果我使用日志,就會(huì)拿到我請(qǐng)求的路徑、我的客戶端以及我的參數(shù)值,效果如下:

SpringBoot之自定義starter?如果由以上效果,說(shuō)明我的案例二:AOP方式統(tǒng)一服務(wù)日志就成功了!

今天的學(xué)習(xí)記錄就到這了,拜拜!

說(shuō)明:學(xué)習(xí)記錄,若有錯(cuò)誤,歡迎指正,若有疑問(wèn),歡迎評(píng)論? ??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-427181.html

到了這里,關(guān)于SpringBoot之自定義starter的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot緩存注解@Cacheable之自定義key策略及緩存失效時(shí)間指定

    SpringBoot緩存注解@Cacheable之自定義key策略及緩存失效時(shí)間指定

    1. 項(xiàng)目依賴 本項(xiàng)目借助 SpringBoot 2.2.1.RELEASE ?+? maven 3.5.3 ?+? IDEA ?+? redis5.0 進(jìn)行開(kāi)發(fā) 開(kāi)一個(gè) web 服務(wù)用于測(cè)試 1. key 生成策略 對(duì)于 @Cacheable 注解,有兩個(gè)參數(shù)用于組裝緩存的 key cacheNames/value: 類(lèi)似于緩存前綴 key: SpEL 表達(dá)式,通常根據(jù)傳參來(lái)生成最終的緩存 key 默認(rèn)的 redisK

    2024年02月19日
    瀏覽(15)
  • 【實(shí)戰(zhàn)】SpringBoot自定義 starter及使用

    【實(shí)戰(zhàn)】SpringBoot自定義 starter及使用

    各位大佬在使用springboot或者springcloud的時(shí)候都會(huì)根據(jù)需求引入各種starter,比如gateway、feign、web、test等等的插件。當(dāng)然,在實(shí)際的業(yè)務(wù)場(chǎng)景中也會(huì)有將第三方組件整合為starter供其他項(xiàng)目接入。那么,我們今天就分享一波SpringBoot自定義 Starter及使用。 SpringBoot starter簡(jiǎn)介 starter是

    2024年01月22日
    瀏覽(16)
  • SpringBoot自定義starter之接口日志輸出

    SpringBoot自定義starter之接口日志輸出

    本文靈感來(lái)源是一道面試題。 要求做一個(gè)可以復(fù)用的接口日志輸出工具,在使用時(shí)引入依賴,即可使用。 可能用在多個(gè)項(xiàng)目中。 問(wèn)題處理思路是,自定義一個(gè)SpringBoot的Starter,可以加入一些功能配置。核心使用自定義注解、Aspect切面來(lái)做。 用切面去切你的自定義注解即可。

    2024年02月08日
    瀏覽(24)
  • 華為二面:SpringBoot如何自定義Starter?

    Spring Boot的自動(dòng)配置機(jī)制為開(kāi)發(fā)人員提供了一種輕松集成和配置各種功能的便捷方式。然而,隨著項(xiàng)目的復(fù)雜性增加,更好地組織和分享通用功能變得至關(guān)重要。自定義Starter成為了理想的解決方案,旨在簡(jiǎn)化項(xiàng)目的依賴管理和自動(dòng)配置,使開(kāi)發(fā)者能夠迅速而靈活地集成特定的

    2024年02月21日
    瀏覽(16)
  • SpringBoot 系列 web 篇之自定義返回 Http Code 的 n 種姿勢(shì)

    雖然 http 的提供了一整套完整、定義明確的狀態(tài)碼,但實(shí)際的業(yè)務(wù)支持中,后端并不總會(huì)遵守這套規(guī)則,更多的是在返回結(jié)果中,加一個(gè) code 字段來(lái)自定義業(yè)務(wù)狀態(tài),即便是后端 5xx 了,返回給前端的 http code 依然是 200 那么如果我想遵守 http 的規(guī)范,不同的 case 返回不同的

    2024年04月12日
    瀏覽(17)
  • 【Springboot】| 從深入自動(dòng)配置原理到實(shí)現(xiàn) 自定義Springboot starter

    【Springboot】| 從深入自動(dòng)配置原理到實(shí)現(xiàn) 自定義Springboot starter

    Springboot starter 是SpringBoot的一個(gè)重要概念,是“一站式服務(wù) (one-stop)”的依賴 Jar 包包含 Spring 以及相關(guān)技術(shù)(比如 Redis)的所有依賴提供了自動(dòng)配置的功能,開(kāi)箱即用提供了良好的依賴管理,避免了包遺漏、版本沖突等問(wèn)題。 簡(jiǎn)單來(lái)說(shuō), Springboot starter 提供了一種自動(dòng)配置的機(jī)制

    2024年02月11日
    瀏覽(21)
  • SpringBoot自定義starter開(kāi)發(fā):IP計(jì)數(shù)業(yè)務(wù)功能開(kāi)發(fā)

    ??作者簡(jiǎn)介:練習(xí)時(shí)長(zhǎng)兩年半的Java up主 ??個(gè)人主頁(yè):程序員老茶 ?? ps:點(diǎn)贊??是免費(fèi)的,卻可以讓寫(xiě)博客的作者開(kāi)心好久好久?? ??系列專(zhuān)欄:Java全棧,計(jì)算機(jī)系列(火速更新中) ?? 格言:種一棵樹(shù)最好的時(shí)間是十年前,其次是現(xiàn)在 ??動(dòng)動(dòng)小手,點(diǎn)個(gè)關(guān)注不迷路,感

    2024年04月16日
    瀏覽(22)
  • SpringBoot——原理(自動(dòng)配置_案例(自定義阿里云文件上傳starter))

    SpringBoot——原理(自動(dòng)配置_案例(自定義阿里云文件上傳starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依賴,雖然springboot已經(jīng)提供了很多的起步依賴,但是在實(shí)際項(xiàng)目開(kāi)發(fā)中可能會(huì)用到和第三方的技術(shù),不是所有第三方在springboot中都有收錄。 比如之前文章中有用到過(guò)的阿里云OSS,阿里云并沒(méi)有提供起步依賴,導(dǎo)致每次使用

    2024年02月07日
    瀏覽(20)
  • SpringBoot——原理(自動(dòng)配置_案例(自定義阿里云文件上starter))

    SpringBoot——原理(自動(dòng)配置_案例(自定義阿里云文件上starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依賴,雖然springboot已經(jīng)提供了很多的起步依賴,但是在實(shí)際項(xiàng)目開(kāi)發(fā)中可能會(huì)用到和第三方的技術(shù),不是所有第三方在springboot中都有收錄。 比如之前文章中有用到過(guò)的阿里云OSS,阿里云并沒(méi)有提供起步依賴,導(dǎo)致每次使用

    2024年02月06日
    瀏覽(27)
  • SpringBoot3自動(dòng)配置流程 SPI機(jī)制 核心注解 自定義starter

    SpringBoot3自動(dòng)配置流程 SPI機(jī)制 核心注解 自定義starter

    導(dǎo)入 starter 依賴導(dǎo)入 autoconfigure 尋找類(lèi)路徑下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件 啟動(dòng),加載所有 自動(dòng)配置類(lèi) xxxAutoConfiguration 給容器中配置功能 組件 組件參數(shù) 綁定到 屬性類(lèi) 中。 xxxProperties 屬性類(lèi) 和 配置文件 前綴項(xiàng)綁定 @Contional 派生的條件

    2024年02月16日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包