欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

案例講解SpringBoot?Starter的使用教程

 更新時(shí)間:2023年12月20日 17:00:33   作者:Java方文山  
SpringBoot中的starter是一種非常重要的機(jī)制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn)starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動(dòng)掃描到要加載的信息并啟動(dòng)相應(yīng)的默認(rèn)配置,本文通過(guò)案例講解SpringBoot?Starter的使用,感興趣的朋友一起看看吧

一、Starter的簡(jiǎn)介

1.什么是SpringBoot Starter

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路徑下的類發(fā)現(xiàn)需要的Bean,并注冊(cè)進(jìn)IOC容器。SpringBoot提供了針對(duì)日常企業(yè)應(yīng)用研發(fā)各種場(chǎng)景的spring-boot-starter依賴模塊。

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

2.怎么使用SpringBoot 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)直不要太爽。

3.應(yīng)用場(chǎng)景

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

常見(jiàn)應(yīng)用場(chǎng)景如下:

1)通用模塊-短信發(fā)送模塊

2)基于AOP技術(shù)實(shí)現(xiàn)日志切面

3)分布式雪花ID,Long轉(zhuǎn)String,解決精度問(wèn)題

4)微服務(wù)項(xiàng)目的數(shù)據(jù)庫(kù)連接池配置

5)微服務(wù)項(xiàng)目的每個(gè)模塊都要訪問(wèn)redis數(shù)據(jù)庫(kù),每個(gè)模塊都要配置redisTemplate

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

二、案例講解 

下面我用案例的方式教會(huì)大家如何使用starter啟動(dòng)器。

1.短信發(fā)送模塊

1.1.搭建SpringBoot環(huán)境

首先我們搭建一個(gè)SpringBoot項(xiàng)目,需要注意的是以下圖片內(nèi)容,有關(guān)后期導(dǎo)入依賴

 導(dǎo)入一個(gè)注解處理器,用于處理 Spring Boot 配置類的注解,并生成配置屬性的元數(shù)據(jù)。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

開(kāi)發(fā)過(guò)程中起到以下幾個(gè)重要的作用:

  • 生成配置屬性的元數(shù)據(jù): 當(dāng)你使用 @ConfigurationProperties 注解來(lái)聲明配置類時(shí),spring-boot-configuration-processor 會(huì)解析該注解,并生成與配置屬性相關(guān)的元數(shù)據(jù)。這些元數(shù)據(jù)包括屬性的名稱、類型、描述、默認(rèn)值等信息。這些信息可以幫助 IDE 在開(kāi)發(fā)過(guò)程中提供代碼提示、自動(dòng)補(bǔ)全和驗(yàn)證功能。
  • 提供配置屬性的編譯時(shí)驗(yàn)證: 使用 @ConfigurationProperties 注解時(shí),你可以使用其他注解(如 @Value、@Valid 等)來(lái)描述配置屬性的約束條件。spring-boot-configuration-processor 可以處理這些注解,并在編譯時(shí)進(jìn)行驗(yàn)證。這樣,你可以在開(kāi)發(fā)階段及早發(fā)現(xiàn)配置屬性的錯(cuò)誤或不一致,而不是在運(yùn)行時(shí)才遇到問(wèn)題。
  • 簡(jiǎn)化配置類的編寫(xiě): 通過(guò)使用 spring-boot-configuration-processor,你可以更輕松地編寫(xiě)配置類。它會(huì)自動(dòng)處理 @ConfigurationProperties 注解及其相關(guān)注解,生成屬性的 getter、setter 方法,并提供默認(rèn)的配置文件映射規(guī)則。這樣,你可以專注于定義配置屬性的結(jié)構(gòu)和業(yè)務(wù)邏輯,而不需要手動(dòng)編寫(xiě)重復(fù)的代碼。
  • 提升開(kāi)發(fā)體驗(yàn): spring-boot-configuration-processor 增強(qiáng)了開(kāi)發(fā)工具的功能,例如在 IDE 中提供配置屬性的智能提示、文檔、類型檢查等功能。這可以減少開(kāi)發(fā)過(guò)程中的錯(cuò)誤,并提高代碼的可讀性和可維護(hù)性。

在這之前需要知道以下我們啟動(dòng)器與springboot官方提供的依賴有什么關(guān)系

SpringBoot官方命名方式:

spring-boot-starter-{模塊名}

例如:spring-boot-starter-web

自定義命名方式:

{模塊名}-spring-boot-starter

例如:mystarter-spring-boot-starter

1.2.創(chuàng)建配置類Properties

/**
 * 短信服務(wù)配置類
 */
@Data
@ConfigurationProperties(prefix = "sms")
public class SmsProperties {
    private String key;//訪問(wèn)ID、即帳號(hào)
    private String secret;//訪問(wèn)憑證,即密鑰
    private String enabled;//用于操作是否啟用該模塊
}

提供該配置類的set\get方法并且將配置文件中以sms為前綴的屬性值綁定到該類對(duì)應(yīng)的屬性上。

1.3.編寫(xiě)短信業(yè)務(wù)功能

ISmsService代碼

public interface ISmsService {
    /**
     * 發(fā)送短信
     *
     * @param phone        要發(fā)送的手機(jī)號(hào)
     * @param data         要發(fā)送的內(nèi)容
     */
    void send(String phone, String data);
}

SmsServiceImpl代碼

public class SmsServiceImpl implements ISmsService {
    private SmsProperties smsProperties ;
    public SmsServiceImpl(SmsProperties smsProperties) {
        this.smsProperties=smsProperties;
    }
    @Override
    public void send(String phone, String data) {
        String key = smsProperties.getKey();
        String secret = smsProperties.getSecret();
        System.out.println("接入短信系統(tǒng),Key=" + key + ",Secret=" + secret);
        System.out.println("短信發(fā)送,phone=" + phone + "data=" + data);
    }
}

1.4.創(chuàng)建自動(dòng)配置類

@Configuration
@EnableConfigurationProperties({SmsProperties.class})
@ConditionalOnProperty(prefix = "sms",name = "enable",havingValue = "true")
public class SmsConfig {
    @Autowired
    private SmsProperties smsProperties;
    //通過(guò)@Bean注解將其注入到Spring上下文中
    @Bean
    public ISmsService smsService(){
        //調(diào)用SMS短信服務(wù)接口時(shí),必須通過(guò)賬號(hào)和密碼的方式進(jìn)行調(diào)用。
        return new SmsServiceImpl(smsProperties);
    }
}

該類的作用是將這個(gè)類交與spring管理的同時(shí)也把SmsProperties這個(gè)類交給spring管理,并且將這個(gè)配置類放入spring容器讓其他類可以獲取到,這里還有個(gè)條件就是如果我sms.enable的值不為true,那么就都不會(huì)加入到spring中。

注釋小課堂:

@Configuration注解:用于定義該類是一個(gè)配置類,相當(dāng)于傳統(tǒng)Spring XML配置文件中的<beans>標(biāo)簽,表示其中包含有一個(gè)或多個(gè)@Bean注解的方法,用于構(gòu)建bean對(duì)象并放入Spring容器中管理。

@EnableConfigurationProperties({SmsProperties.class})注解:用于啟用指定類型的配置屬性(Configuration Properties)。在這里,它啟用了SmsProperties類作為配置屬性類,使得可以在SmsConfig類中通過(guò)@Autowired注解自動(dòng)注入SmsProperties對(duì)象。

@Bean注解:用于定義一個(gè)bean,并將其注入到Spring上下文中。在這個(gè)例子中,smsService方法返回的SmsServiceImpl對(duì)象會(huì)被納入到Spring容器的管理范圍內(nèi)。

@ConditionalOnProperty(prefix = "sms", name = "enable", havingValue = "true")注解的作用是根據(jù)配置文件中的屬性值來(lái)?xiàng)l件性地加載或禁用Bean。

具體而言,它基于以下三個(gè)條件進(jìn)行判斷:

prefix:指定屬性的前綴,即在配置文件中以什么前綴開(kāi)始的屬性。
name:指定屬性的名稱,即需要判斷的屬性的具體名稱。
havingValue:指定屬性的期望值,當(dāng)該屬性的值與havingValue指定的值相等時(shí),才滿足條件。

1.5.測(cè)試代碼

我們?cè)赼pplication.properties配置一下SmsProperties

sms:
    sms.key=j7fj8eoji92d
    sms.secret=8u8u8u

 在測(cè)試類調(diào)用一下SmsServiceImpl的send方法

@SpringBootTest
class SmsApplicationTests {
    @Autowired
    private SmsProperties smsProperties ;
    @Test
    void contextLoads() {
        new SmsServiceImpl(smsProperties).send("110", "愛(ài)你");
    }
}

控制臺(tái)輸出結(jié)果

 因?yàn)槲覀兊淖詣?dòng)裝配類,啟動(dòng)的spring就會(huì)將本身以及配置類注入到spring中,而配置類又與配置文件也就是application.properties做了匹配,只要配置文件中填了sms.key和sms.secret就會(huì)將填寫(xiě)的內(nèi)容注入到配置類中。

1.6.其他模塊導(dǎo)入短信模塊

①首先需要編寫(xiě)spring.factories文件加載自動(dòng)配置類

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

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.csdn.sms.Properties.SmsConfig

②打包安裝

直接install即可

在本地倉(cāng)庫(kù)就會(huì)有你剛剛所打包的依賴

注意:打包的時(shí)候請(qǐng)注釋application.properties,否則這里的配置就定死了,不會(huì)隨著我們調(diào)用者的配置而改動(dòng)?。?!

③引用并測(cè)試

引入依賴

    <dependency>
            <groupId>com.csdn</groupId>
            <artifactId>sms</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

配置application.yml

如果enable不為true,那么就不會(huì)注入javabean就會(huì)報(bào)錯(cuò)

測(cè)試模塊功能

@SpringBootTest
class BootApplicationTests {
    @Autowired
    private SmsProperties smsProperties;
    @Test
    void contextLoads() {
        new SmsServiceImpl(smsProperties).send("15574117565","其他模塊");
    }
}

看到這里我們的starter的短信模塊就完成了

2.基于AOP技術(shù)的Log日志模塊

我現(xiàn)有一個(gè)基于AOP的Log日志功能,這個(gè)切面定義了一個(gè)切入點(diǎn)webLog(),它匹配所有以Controller結(jié)尾的類的所有方法。在這些方法執(zhí)行之前和之后,分別執(zhí)行了doBefore()和doAfterReturning()方法,這兩個(gè)方法中包含了對(duì)請(qǐng)求信息的記錄和處理。

@Component
@Slf4j
@Aspect
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);
    }
}

我現(xiàn)在要用剛剛的短信發(fā)送模塊中的方式,通過(guò)yml配置enable的屬性來(lái)控制是否開(kāi)啟日志模塊

2.1.創(chuàng)建配置類Properties

@Data
@ConfigurationProperties(prefix = "weblog")
public class WebLogProperties {
    private String enable;//控制是否開(kāi)啟切面
}

2.2.編寫(xiě)自動(dòng)配置類

@Configuration
@EnableConfigurationProperties({WebLogProperties.class})
@ConditionalOnProperty(prefix = "weblog", value="enable",havingValue = "true")
public class WebLogAutoConfig {
    @Bean
    @ConditionalOnMissingBean
    public WebLogAspect webLogAspect(){
        return new WebLogAspect();
    }
}

或者直接在切面類上加上注解

@ConditionalOnProperty(prefix = "weblog", value="enable",havingValue = "true")

當(dāng)我們配置weblog.enable等于true的時(shí)候才會(huì)開(kāi)啟Log日志管理,下面演示一下

到此這篇關(guān)于案例講解SpringBoot Starter的使用教程的文章就介紹到這了,更多相關(guān)SpringBoot Starter使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis實(shí)現(xiàn)分頁(yè)的注意點(diǎn)

    Mybatis實(shí)現(xiàn)分頁(yè)的注意點(diǎn)

    Mybatis提供了強(qiáng)大的分頁(yè)攔截實(shí)現(xiàn),可以完美的實(shí)現(xiàn)分功能。下面小編給大家分享小編在使用攔截器給mybatis進(jìn)行分頁(yè)所遇到的問(wèn)題及注意點(diǎn),需要的朋友一起看看吧
    2017-07-07
  • JFinal使用ajaxfileupload實(shí)現(xiàn)圖片上傳及預(yù)覽

    JFinal使用ajaxfileupload實(shí)現(xiàn)圖片上傳及預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了JFinal使用ajaxfileupload實(shí)現(xiàn)圖片上傳及預(yù)覽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Struts2學(xué)習(xí)筆記(6)-簡(jiǎn)單的數(shù)據(jù)校驗(yàn)

    Struts2學(xué)習(xí)筆記(6)-簡(jiǎn)單的數(shù)據(jù)校驗(yàn)

    這篇文章主要介紹Struts2中的數(shù)據(jù)校驗(yàn),通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明,希望能給大家做一個(gè)參考。
    2016-06-06
  • Java如何從List中刪除元素的正確用法舉例

    Java如何從List中刪除元素的正確用法舉例

    這篇文章主要給大家介紹了關(guān)于Java如何從List中刪除元素的正確用法, 列表List是Java中的一種數(shù)據(jù)結(jié)構(gòu),存放按照添加順序的元素,是個(gè)有序的集合,需要的朋友可以參考下
    2023-07-07
  • 老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)

    老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)

    下面小編就為大家?guī)?lái)一篇老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java?詳細(xì)分析四個(gè)經(jīng)典鏈表面試題

    Java?詳細(xì)分析四個(gè)經(jīng)典鏈表面試題

    兄弟們,編程,當(dāng)我們學(xué)習(xí)完數(shù)據(jù)結(jié)構(gòu)的時(shí)候,你就會(huì)有一種豁然開(kāi)朗的感覺(jué)。算是真正的入了編程的門(mén),所以打好數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)是特別特別重要的
    2022-03-03
  • springboot整合jasypt的詳細(xì)過(guò)程

    springboot整合jasypt的詳細(xì)過(guò)程

    這篇文章主要介紹了springboot整合jasypt的詳細(xì)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-02-02
  • Spring Security基本架構(gòu)與初始化操作流程詳解

    Spring Security基本架構(gòu)與初始化操作流程詳解

    這篇文章主要介紹了Spring Security基本架構(gòu)與初始化操作流程,Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制解決方案的安全框架
    2023-03-03
  • Java使用entrySet方法獲取Map集合中的元素

    Java使用entrySet方法獲取Map集合中的元素

    這篇文章主要為大家詳細(xì)介紹了Java使用entrySet方法獲取Map集合中的元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 微信小程序+后端(java)實(shí)現(xiàn)開(kāi)發(fā)

    微信小程序+后端(java)實(shí)現(xiàn)開(kāi)發(fā)

    這篇文章主要介紹了微信小程序+后端(java)實(shí)現(xiàn)開(kāi)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評(píng)論