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

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

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

一、Starter的簡介

1.什么是SpringBoot Starter

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

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

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

2.怎么使用SpringBoot Starter

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

3.應用場景

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

常見應用場景如下:

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

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

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

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

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

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

二、案例講解 

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

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

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

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

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

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

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

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

在這之前需要知道以下我們啟動器與springboot官方提供的依賴有什么關系

SpringBoot官方命名方式:

spring-boot-starter-{模塊名}

例如:spring-boot-starter-web

自定義命名方式:

{模塊名}-spring-boot-starter

例如:mystarter-spring-boot-starter

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

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

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

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

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短信服務接口時,必須通過賬號和密碼的方式進行調(diào)用。
        return new SmsServiceImpl(smsProperties);
    }
}

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

注釋小課堂:

@Configuration注解:用于定義該類是一個配置類,相當于傳統(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:指定屬性的期望值,當該屬性的值與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.其他模塊導入短信模塊

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

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

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

②打包安裝

直接install即可

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

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

③引用并測試

引入依賴

    <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技術的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("開始服務:{}", 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")

當我們配置weblog.enable等于true的時候才會開啟Log日志管理,下面演示一下

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

相關文章

  • 詳解Springboot自定義異常處理

    詳解Springboot自定義異常處理

    本篇文章主要介紹了詳解Springboot自定義異常處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java實現(xiàn)JDK動態(tài)代理的原理詳解

    Java實現(xiàn)JDK動態(tài)代理的原理詳解

    這篇文章主要介紹了Java實現(xiàn)JDK動態(tài)代理的原理詳解,Java常用的動態(tài)代理模式有JDK動態(tài)代理,也有cglib動態(tài)代理,本文重點講解JDK的動態(tài)代理,需要的小伙伴可以參考一下的相關資料
    2022-07-07
  • 用Java生成二維碼并附帶文字信息

    用Java生成二維碼并附帶文字信息

    這篇文章主要介紹了用Java生成二維碼并附帶文字信息,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring boot搭建郵件服務的完整步驟

    Spring boot搭建郵件服務的完整步驟

    這篇文章主要給大家介紹了關于Spring boot搭建郵件服務的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • SpringBoot結(jié)合Vue實現(xiàn)Python在線調(diào)試器

    SpringBoot結(jié)合Vue實現(xiàn)Python在線調(diào)試器

    這篇文章主要為大家詳細介紹了SpringBoot如何結(jié)合Vue實現(xiàn)Python在線調(diào)試器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2026-01-01
  • Spring Bean生命周期之Bean的實例化詳解

    Spring Bean生命周期之Bean的實例化詳解

    這篇文章主要為大家詳細介紹了Spring Bean生命周期之Bean的實例化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 在Java中將jsonObject轉(zhuǎn)換成對象的實現(xiàn)方法

    在Java中將jsonObject轉(zhuǎn)換成對象的實現(xiàn)方法

    在現(xiàn)代的Web開發(fā)中,JSON作為一種輕量級的數(shù)據(jù)交換格式,因其易讀性和易于解析的特點而被廣泛使用,本文將介紹如何在Java中將??jsonObject??轉(zhuǎn)換成Java對象,主要通過使用Gson庫來實現(xiàn)這一功能,需要的朋友可以參考下
    2025-04-04
  • java 和 json 對象間轉(zhuǎn)換

    java 和 json 對象間轉(zhuǎn)換

    這篇文章主要介紹了java 和 json 對象間轉(zhuǎn)換,需要的朋友可以參考下
    2014-03-03
  • SpringBoot框架如何管理Xml和CSV

    SpringBoot框架如何管理Xml和CSV

    XML是可擴展標記語言,是一種用于標記電子文件使其具有結(jié)構(gòu)性的標記語言。CSV是一種通用的、相對簡單的文件格式,通常被用在大數(shù)據(jù)領域,進行大規(guī)模的數(shù)據(jù)搬運操作,本文將介紹SpringBoot框架如何管理Xml和CSV
    2021-06-06
  • springboot接入netty實現(xiàn)在線統(tǒng)計人數(shù)

    springboot接入netty實現(xiàn)在線統(tǒng)計人數(shù)

    本文主要介紹了springboot接入netty實現(xiàn)在線統(tǒng)計人數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03

最新評論

宁津县| 陈巴尔虎旗| 南宁市| 石林| 绥阳县| 台州市| 志丹县| 仁寿县| 曲沃县| 札达县| 雷州市| 江门市| 会东县| 延吉市| 洪泽县| 贵南县| 永靖县| 唐山市| 益阳市| 富顺县| 宁蒗| 库尔勒市| 邯郸市| 察雅县| 罗定市| 客服| 商水县| 永济市| 青河县| 北海市| 锡林浩特市| 卫辉市| 象山县| 温州市| 福泉市| 呼伦贝尔市| 安宁市| 北宁市| 眉山市| 吴旗县| 申扎县|