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

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

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

一、Starter的簡介

1.什么是SpringBoot Starter

SpringBoot中的starter是一種非常重要的機制(自動化配置),能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應(yīng)的默認配置。starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾。

SpringBoot會自動通過classpath路徑下的類發(fā)現(xiàn)需要的Bean,并注冊進IOC容器。SpringBoot提供了針對日常企業(yè)應(yīng)用研發(fā)各種場景的spring-boot-starter依賴模塊。

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

2.怎么使用SpringBoot Starter

在我們的日常開發(fā)工作中,經(jīng)常會有一些獨立于業(yè)務(wù)之外的配置模塊,我們經(jīng)常將其放到一個特定的包下,然后如果另一個工程需要復(fù)用這塊功能的時候,需要將代碼硬拷貝到另一個工程,重新集成一遍,麻煩至極。如果我們將這些可獨立于業(yè)務(wù)代碼之外的功能配置模塊封裝成一個個starter,復(fù)用的時候只需要將其在pom中引用依賴即可, SpringBoot為我們完成自動裝配,簡直不要太爽。

3.應(yīng)用場景

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

常見應(yīng)用場景如下:

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

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

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

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

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

4.自動加載核心注解說明

二、案例講解 

下面我用案例的方式教會大家如何使用starter啟動器。

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

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

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

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

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

開發(fā)過程中起到以下幾個重要的作用:

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

在這之前需要知道以下我們啟動器與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;//訪問ID、即帳號
    private String secret;//訪問憑證,即密鑰
    private String enabled;//用于操作是否啟用該模塊
}

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

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

ISmsService代碼

public interface ISmsService {
    /**
     * 發(fā)送短信
     *
     * @param phone        要發(fā)送的手機號
     * @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)建自動配置類

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

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

注釋小課堂:

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

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

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

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

具體而言,它基于以下三個條件進行判斷:

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

1.5.測試代碼

我們在application.properties配置一下SmsProperties

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

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

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

控制臺輸出結(jié)果

 因為我們的自動裝配類,啟動的spring就會將本身以及配置類注入到spring中,而配置類又與配置文件也就是application.properties做了匹配,只要配置文件中填了sms.key和sms.secret就會將填寫的內(nèi)容注入到配置類中。

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

①首先需要編寫spring.factories文件加載自動配置類

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

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

②打包安裝

直接install即可

在本地倉庫就會有你剛剛所打包的依賴

注意:打包的時候請注釋application.properties,否則這里的配置就定死了,不會隨著我們調(diào)用者的配置而改動?。。?/strong>

③引用并測試

引入依賴

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

配置application.yml

如果enable不為true,那么就不會注入javabean就會報錯

測試模塊功能

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

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

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

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

@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 {
        // 接收到請求,記錄請求內(nèi)容
        ServletRequestAttributes attributes = (ServletRequestAttributes)
                RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 記錄下請求內(nèi)容
        log.info("開始服務(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 {
        // 處理完請求,返回內(nèi)容
        log.info("返回值 : {}" , ret);
    }
}

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

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

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

2.2.編寫自動配置類

@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的時候才會開啟Log日志管理,下面演示一下

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

相關(guān)文章

  • Mybatis實現(xiàn)分頁的注意點

    Mybatis實現(xiàn)分頁的注意點

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

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

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

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

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

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

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

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

    下面小編就為大家?guī)硪黄仙U凧ava網(wǎng)絡(luò)編程TCP通信(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java?詳細分析四個經(jīng)典鏈表面試題

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

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

    springboot整合jasypt的詳細過程

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

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

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

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

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

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

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

最新評論