亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot自定義Starter的教程指南

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

什么是SpringBoot Starter

SpringBoot Starter是一個特殊的依賴描述符,它包含了一系列的庫依賴,這些庫依賴定義了某個功能領域(如web應用、數據庫訪問等)所需的所有類庫。SpringBoot通過spring-boot-autoconfigure模塊提供的自動配置機制來自動配置這些依賴。

Web應用開發(fā)

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

數據庫訪問

  • spring-boot-starter-data-jpa:集成Spring Data JPA和Hibernate,用于關系數據庫的操作。
  • spring-boot-starter-data-mongodb:用于與MongoDB數據庫的集成。
  • spring-boot-starter-data-redis:用于與Redis鍵值存儲的集成。

庫依賴

把具備某些功能的坐標打包到一起,簡化依賴導入。

比如導入了spring-boot-starter-web這個starter,那么和web相關的jar包都一起自動導入到項目中了。

在這里插入圖片描述

自動配置

無需手動配置xml,由starter進行自動配置并管理bean,簡化開發(fā)過程。

mybatis-spring-boot-starter為例。

1)當引入了mybatis-spring-boot-starter后,其引入的相關依賴如下:

在這里插入圖片描述

2)它導入了一個mybatis-spring-boot-autoconfigure 的jar包,其中有一個自動配置類MybatisAutoConfiguration 。

在這里插入圖片描述

3)打開看看,里面的關鍵代碼

在這里插入圖片描述

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

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

在這里插入圖片描述

把此類標記為一個配置屬性類,prefix指定了前綴,其屬性就是配置的可選參數。

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

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

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

在這里插入圖片描述

當 SpringBoot 應用程序啟動時,會去加載該 jar 包下的META-INF/spring.factories文件。

詳情可以參考:SpringBoot自動裝配原理解析

命名規(guī)范

spring-boot-starter-xxx是SpringBoot官方定義的jar,如 spring-bbot-starter-web。
xxx-spring-boot-starter是非官網定義的,如第三方jar包 mybatis-spring-boot-starter。

自定義 Starter

一般來說,需要我們自定義 starter 的原因如下:

  • 封裝功能:封裝一組特定的功能,使其可以輕松地在其他項目中復用。
  • 簡化配置:自動配置相關類庫,減少重復的配置工作。
  • 模塊化設計:保持應用的模塊化,將特定功能隔離在單獨的模塊中。

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

1)新建項目,配置 pom。

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

4)在包config下創(chuàng)建類TokenAutoConfiguration,實現(xiàn)自動配置,把服務注入到Spring中。

在這里插入圖片描述

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

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

6)把項目打包發(fā)布到 maven 倉庫。

7)新建一個項目,并引入token-redis-spring-boot-starter。

在這里插入圖片描述

8)在配置文件中配置

在這里插入圖片描述

9)測試運行

在這里插入圖片描述

輸出:127.0.0.1,0000,8888888

條件注解

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

比如:@ConditionalOnProperty、@ConditionalOnClass@ConditionalOnMissingBean

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

@ConditionalOnProperty

@ConditionalOnProperty 注解用于根據配置文件中的屬性值來決定是否加載某個自動配置類。

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

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

在這個例子中,只有當配置文件中存在token.enabled屬性,TokenAutoConfiguration類才會被加載。

@ConditionalOnClass

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

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

在這個例子中,只有當類路徑上存在com.mysql.cj.jdbc.Driver類時,MySqlAutoConfiguration類才會被加載,這通常意味著MySQL JDBC驅動已經添加到了項目的依賴中。

@ConditionalOnMissingBean

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

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

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

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

組合使用條件注解

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

例如,可以同時使用@ConditionalOnProperty@ConditionalOnClass來確保某個自動配置類只在滿足特定屬性值和類路徑上有特定類時才被加載。

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

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

以上就是SpringBoot自定義Starter的教程指南的詳細內容,更多關于SpringBoot自定義Starter的資料請關注腳本之家其它相關文章!

相關文章

最新評論