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

SpringBoot自定義Starter的教程指南

 更新時(shí)間:2024年11月15日 10:23:06   作者:碼上一元  
SpringBoot的Starter自動(dòng)配置機(jī)制極大地簡(jiǎn)化了依賴管理和應(yīng)用配置,使得開發(fā)者可以以最少的配置快速啟動(dòng)和運(yùn)行Spring應(yīng)用,有時(shí),標(biāo)準(zhǔn)的Starter可能無(wú)法滿足特定需求,需要?jiǎng)?chuàng)建自定義Starter,所以本文給大家介紹了SpringBoot自定義Starter的教程指南

什么是SpringBoot Starter

SpringBoot Starter是一個(gè)特殊的依賴描述符,它包含了一系列的庫(kù)依賴,這些庫(kù)依賴定義了某個(gè)功能領(lǐng)域(如web應(yīng)用、數(shù)據(jù)庫(kù)訪問(wèn)等)所需的所有類庫(kù)。SpringBoot通過(guò)spring-boot-autoconfigure模塊提供的自動(dòng)配置機(jī)制來(lái)自動(dòng)配置這些依賴。

Web應(yīng)用開發(fā)

  • spring-boot-starter-web:用于創(chuàng)建Web應(yīng)用和RESTful服務(wù),包含Tomcat和Spring MVC。
  • spring-boot-starter-webflux:用于構(gòu)建響應(yīng)式Web應(yīng)用,基于Reactor和Spring WebFlux。

數(shù)據(jù)庫(kù)訪問(wèn)

  • spring-boot-starter-data-jpa:集成Spring Data JPA和Hibernate,用于關(guān)系數(shù)據(jù)庫(kù)的操作。
  • spring-boot-starter-data-mongodb:用于與MongoDB數(shù)據(jù)庫(kù)的集成。
  • spring-boot-starter-data-redis:用于與Redis鍵值存儲(chǔ)的集成。

庫(kù)依賴

把具備某些功能的坐標(biāo)打包到一起,簡(jiǎn)化依賴導(dǎo)入。

比如導(dǎo)入了spring-boot-starter-web這個(gè)starter,那么和web相關(guān)的jar包都一起自動(dòng)導(dǎo)入到項(xiàng)目中了。

在這里插入圖片描述

自動(dòng)配置

無(wú)需手動(dòng)配置xml,由starter進(jìn)行自動(dòng)配置并管理bean,簡(jiǎn)化開發(fā)過(guò)程。

mybatis-spring-boot-starter為例。

1)當(dāng)引入了mybatis-spring-boot-starter后,其引入的相關(guān)依賴如下:

在這里插入圖片描述

2)它導(dǎo)入了一個(gè)mybatis-spring-boot-autoconfigure 的jar包,其中有一個(gè)自動(dòng)配置類MybatisAutoConfiguration

在這里插入圖片描述

3)打開看看,里面的關(guān)鍵代碼

在這里插入圖片描述

4)其中@Configuration@Bean注解,結(jié)合使用替代傳統(tǒng)的xml配置文件,把SqlSessionTemplateSqlSessionFactory注入到Spring容器。

注解@EnableConfigurationProperties,其作用是讓后面指定的配置屬性MybatisProperties類生效。

在這里插入圖片描述

把此類標(biāo)記為一個(gè)配置屬性類,prefix指定了前綴,其屬性就是配置的可選參數(shù)。

如配置包的別名:mybatis.type-aliases-package=com.yyh.entity

5)那么這個(gè)MybatisAutoConfiguration類是怎么被加載的呢?

META-INF/spring.factories文件中,定義了MybatisAutoConfiguration

在這里插入圖片描述

當(dāng) SpringBoot 應(yīng)用程序啟動(dòng)時(shí),會(huì)去加載該 jar 包下的META-INF/spring.factories文件。

詳情可以參考:SpringBoot自動(dòng)裝配原理解析

命名規(guī)范

spring-boot-starter-xxx是SpringBoot官方定義的jar,如 spring-bbot-starter-web。
xxx-spring-boot-starter是非官網(wǎng)定義的,如第三方j(luò)ar包 mybatis-spring-boot-starter。

自定義 Starter

一般來(lái)說(shuō),需要我們自定義 starter 的原因如下:

  • 封裝功能:封裝一組特定的功能,使其可以輕松地在其他項(xiàng)目中復(fù)用。
  • 簡(jiǎn)化配置:自動(dòng)配置相關(guān)類庫(kù),減少重復(fù)的配置工作。
  • 模塊化設(shè)計(jì):保持應(yīng)用的模塊化,將特定功能隔離在單獨(dú)的模塊中。

比如,我們現(xiàn)在要新建一個(gè) token-redis-spring-boot-starter

1)新建項(xiàng)目,配置 pom。

在這里插入圖片描述

2)在包util下創(chuàng)建類TokenProperties,此類是一個(gè)配置屬性類。

在這里插入圖片描述

3)在包service下創(chuàng)建類TokenService,作為一個(gè)服務(wù)。

在這里插入圖片描述

4)在包c(diǎn)onfig下創(chuàng)建類TokenAutoConfiguration,實(shí)現(xiàn)自動(dòng)配置,把服務(wù)注入到Spring中。

在這里插入圖片描述

5)創(chuàng)建 spring.factories文件

#后面的路徑是TokenAutoConfiguration所在的路徑
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.demo.config.TokenAutoConfiguration

6)把項(xiàng)目打包發(fā)布到 maven 倉(cāng)庫(kù)。

7)新建一個(gè)項(xiàng)目,并引入token-redis-spring-boot-starter

在這里插入圖片描述

8)在配置文件中配置

在這里插入圖片描述

9)測(cè)試運(yùn)行

在這里插入圖片描述

輸出:127.0.0.1,0000,8888888

條件注解

在文中出現(xiàn)了好幾個(gè)類似于這樣的注解@ConditionalXXX。

比如:@ConditionalOnProperty、@ConditionalOnClass、 @ConditionalOnMissingBean

@Conditional 是在 SpringFramework 4.0 版本正式推出的,它可以讓 Bean的裝載基于一些指定的條件,換句話說(shuō),被標(biāo)注 @Conditional 注解的 Bean 要注冊(cè)到 IOC 容器時(shí),必須全部滿足 @Conditional 上指定的所有條件才可以。

@ConditionalOnProperty

@ConditionalOnProperty 注解用于根據(jù)配置文件中的屬性值來(lái)決定是否加載某個(gè)自動(dòng)配置類。

  • 屬性名稱:可以指定一個(gè)或多個(gè)屬性名稱,只有當(dāng)這些屬性被設(shè)置時(shí),自動(dòng)配置類才會(huì)被加載。
  • 屬性值:可以進(jìn)一步指定需要匹配的屬性值,只有當(dāng)屬性的值與指定值相匹配時(shí),自動(dòng)配置類才會(huì)被加載。
@Configuration
@EnableConfigurationProperties({TokenProperties.class})
@ConditionalOnProperty(
    value = {"token.enabled"},
    havingValue = "true"
)
public class TokenAutoConfiguration {
    public TokenAutoConfiguration() {
    }

    @Bean
    public TokenService tokenService() {
        return new TokenService();
    }
}

在這個(gè)例子中,只有當(dāng)配置文件中存在token.enabled屬性,TokenAutoConfiguration類才會(huì)被加載。

@ConditionalOnClass

@ConditionalOnClass 注解用于檢查類路徑上是否存在某個(gè)類,如果存在,則加載自動(dòng)配置類。

  • classes:指定一個(gè)或多個(gè)類,如果這些類在類路徑上被找到,自動(dòng)配置類就會(huì)被加載。
@Configuration
@ConditionalOnClass(name = {"com.mysql.cj.jdbc.Driver"})
public class MySqlAutoConfiguration {
    // ...
}

在這個(gè)例子中,只有當(dāng)類路徑上存在com.mysql.cj.jdbc.Driver類時(shí),MySqlAutoConfiguration類才會(huì)被加載,這通常意味著MySQL JDBC驅(qū)動(dòng)已經(jīng)添加到了項(xiàng)目的依賴中。

@ConditionalOnMissingBean

@ConditionalOnMissingBean 注解用于檢查Spring容器中是否已經(jīng)存在某個(gè)特定的Bean,如果不存在,則創(chuàng)建一個(gè)新的Bean。

  • value:指定需要檢查的Bean的類型。
  • search:指定搜索Bean的范圍,默認(rèn)為SearchStrategy.ALL,意味著在當(dāng)前上下文和父上下文中搜索。
@Configuration
public class MyServiceAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean(MyService.class)
    public MyService myService() {
        return new DefaultMyService();
    }
}

在這個(gè)例子中,如果Spring容器中沒(méi)有MyService類型的Bean,那么myService方法將被調(diào)用以創(chuàng)建一個(gè)新的MyService Bean。

組合使用條件注解

這些條件注解可以單獨(dú)使用,也可以組合使用,以滿足更復(fù)雜的條件判斷需求。

例如,可以同時(shí)使用@ConditionalOnProperty@ConditionalOnClass來(lái)確保某個(gè)自動(dòng)配置類只在滿足特定屬性值和類路徑上有特定類時(shí)才被加載。

@Configuration
@ConditionalOnProperty(name = "myapp.enabled")
@ConditionalOnClass(name = "com.mysql.cj.jdbc.Driver")
public class MySqlAutoConfiguration {
    // ...
}

在這個(gè)例子中,MySqlAutoConfiguration只有在配置文件中設(shè)置了myapp.enabled屬性,并且類路徑上存在com.mysql.cj.jdbc.Driver類時(shí)才會(huì)被加載。

以上就是SpringBoot自定義Starter的教程指南的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot自定義Starter的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論