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

Spring Boot Starter 的應(yīng)用場(chǎng)景與自動(dòng)配置方式

 更新時(shí)間:2025年03月12日 09:07:06   作者:CodeBlogMan  
本文介紹了Spring Boot Starter的使用場(chǎng)景,如何自定義Starter以及Spring Boot自動(dòng)配置原理,Spring Boot Starter解決了依賴導(dǎo)入和配置繁瑣的問(wèn)題,通過(guò)自動(dòng)配置類和xxxProperties類實(shí)現(xiàn)組件的自動(dòng)注入和配置,感興趣的朋友一起看看吧

前言

一、Spring Boo Starter 簡(jiǎn)介

在 SpringBoot 出現(xiàn)之前,如果我們想使用 SpringMVC 來(lái)構(gòu)建我們的 web 項(xiàng)目,必須要做的幾件事情如下:

  • 首先項(xiàng)目中需要引入 SpringMVC 的依賴
  • 在 web.xml 中注冊(cè) SpringMVC 的DispatcherServlet,并配置url映射
  • 編寫(xiě)springmcv-servlet.xml,在其中配置幾個(gè)重要的組件,處理映射器(HandlerMapping)、處理適配器(HandlerAdapter)、視圖解析器(ViewResolver)
  • applicationcontext.xml文件中引入springmvc-servlet.xml文件

以上這幾步只是配置好了 SpringMVC,如果我們還需要與數(shù)據(jù)庫(kù)進(jìn)行交互,就要在 application.xml 中配置數(shù)據(jù)庫(kù)連接池 DataSource,如果需要數(shù)據(jù)庫(kù)事務(wù),還需要配置 TransactionManager… 等等。

以上會(huì)帶來(lái)兩個(gè)明顯的問(wèn)題:

  • 依賴導(dǎo)入問(wèn)題: 每個(gè)項(xiàng)目都需要來(lái)單獨(dú)維護(hù)自己所依賴的 jar 包,手動(dòng)導(dǎo)入依賴容易出錯(cuò),且無(wú)法統(tǒng)一集中管理。
  • 配置繁瑣: 在引入依賴之后需要做繁瑣的配置,并且這些配置是每個(gè)項(xiàng)目來(lái)說(shuō)都是必要的,例如 web.xml 配置(Listener 配置、Filter 配置、Servlet 配置)、log4j 配置、數(shù)據(jù)庫(kù)連接池配置等。

而使用 Spring Boot 的 starters(場(chǎng)景啟動(dòng)器)解決上述的兩個(gè)痛點(diǎn),Spring Boot 通過(guò)將我們常用的功能場(chǎng)景抽取出來(lái),做成的一系列場(chǎng)景啟動(dòng)器。

我們只需要在項(xiàng)目中引入這些 starters,相關(guān)場(chǎng)景的所有依賴就會(huì)全部被導(dǎo)入進(jìn)來(lái),并且我們僅需要通過(guò)配置文件來(lái)進(jìn)行少量的配置就可以使用相應(yīng)的功能。

二、如何自定義 Starter

一般在企業(yè)開(kāi)發(fā)中,會(huì)有專門(mén)的 git 倉(cāng)庫(kù)(組)來(lái)統(tǒng)一放置各個(gè)系統(tǒng)對(duì)應(yīng)的 Starter 項(xiàng)目,其中會(huì)包括一個(gè)空的框架,拉取下來(lái)后我們就可以自己開(kāi)發(fā)了。

在開(kāi)發(fā)之前,我們需要知道常見(jiàn)的使用場(chǎng)景有哪些:

  • API 調(diào)用: 將某系統(tǒng)的部分功能經(jīng)過(guò)封裝后通過(guò) API 暴露出去,方便內(nèi)部/外部系統(tǒng)調(diào)用,調(diào)用時(shí)需要經(jīng)過(guò)認(rèn)證;
  • 基礎(chǔ)組件: 比如全局統(tǒng)一的 Http 組件、緩存組件和一些通用工具包等,目的是提升團(tuán)隊(duì)開(kāi)發(fā)效率和形成開(kāi)發(fā)規(guī)范;
  • 底層框架: 主要是公司自研的系統(tǒng)框架,如 Netty 通信、Maven 插件、ORM 框架等等,用于項(xiàng)目開(kāi)發(fā)的基礎(chǔ)支持。

2.1命名規(guī)范

Spring Boot 官方推薦的命名規(guī)范如下:

  • 前綴:spring-boot-starter-
  • 模式:spring-boot-starter-模塊名
  • 舉例:spring-boot-starter-web、spring-boot-starter-jdbc 等

我們自定義開(kāi)發(fā)推薦的命名:

  • 前綴:xx-spring-boot-starter
  • 模式:xx模塊-spring-boot-starter
  • 舉例:業(yè)務(wù)線-系統(tǒng)名-spring-boot-starter、saas-user-spring-boot-starter等

2.2整體結(jié)構(gòu)

一個(gè) starter 的整體實(shí)現(xiàn)邏輯主要由兩個(gè)基本部分組成:

  • xxxAutoConfiguration:自動(dòng)配置類,對(duì)某個(gè)場(chǎng)景下需要使用到的一些組件進(jìn)行自動(dòng)注入,并利用xxxProperties類來(lái)進(jìn)行組件相關(guān)配置。
  • xxxProperties:某個(gè)場(chǎng)景下所有可配置屬性的集成,在配置文件中配置可以進(jìn)行屬性值的覆蓋。

按照 SpringBoot 官方的定義,starer 的作用就是依賴聚合,因此直接在 starter 內(nèi)部去進(jìn)行代碼實(shí)現(xiàn)是不符合規(guī)定的,starter 應(yīng)該只起到依賴導(dǎo)入的作用,而具體的代碼實(shí)現(xiàn)應(yīng)該去交給其它服務(wù)/模塊來(lái)實(shí)現(xiàn)。

2.3模塊開(kāi)發(fā)

2.3.1依賴引入

首先所有的自動(dòng)配置模塊都要引入兩個(gè) jar 包依賴:

<dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-autoconfigure</artifactId> 
        <!-- 包含很多與自動(dòng)配置相關(guān)的注解的定義,必須要引入 -->
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId> 
       <!-- 可以通過(guò)其它 .properties 文件為相關(guān)類進(jìn)行屬性映射,SpringBoot 默認(rèn)使用 application.yml-->
         <optional>true</optional>
     </dependency>
 <dependencies>

2.3.2xxxAutoConfiguration的實(shí)現(xiàn)

xxxAutoconfigure 模塊中最重要的就是自動(dòng)配置類的編寫(xiě),它為我們實(shí)現(xiàn)組件的自動(dòng)配置與自動(dòng)注入。在編寫(xiě)自動(dòng)配置類的時(shí)候,我們應(yīng)該要考慮向容器中注入什么組件,如何去配置它。

@Configuration 
@EnableConfigurationProperties(xxxProperties.class)
public class xxxAutoConfiguration {
 @Resource
 private xxxProperties properties;
    @Bean
    public static BeanYouNeed beanYouNeed() {
     BeanYouNeed bean = new BeanYouNeed()
     bean.setField(properties.get(field));
     bean.setField(properties.get(field));
    }
}

2.3.3 xxxProperties的實(shí)現(xiàn)

這是跟配置文件相綁定的類,里邊的屬性就是我們可以在配置文件中配置的內(nèi)容,然后通過(guò)@ConfigurationProperties將其與配置文件綁定:

//使用 @ConfigurationProperties 注解綁定配置文件
@ConfigurationProperties(prefix = "your properties") 
public class xxxProperties {
    private String url;
    private String key;
    private String secret;
}

2.3.4配置spring.factories文件

在 resource 目錄下新建META-INF文件夾,在文件夾下新建spring.factories文件,并添加寫(xiě)好的xxxAutoConfiguration類:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xx.xx.xx.autoconfigure.xxxAutoConfiguration

三、淺析 Spring Boot 自動(dòng)配置原理

在這一小節(jié)我將分析 Spring Boot 在創(chuàng)建 Stater 時(shí)主要幫我們完成的兩件最關(guān)鍵的事情:

  • 相關(guān)組件的自動(dòng)導(dǎo)入
  • 相關(guān)組件的自動(dòng)配置

這兩件事情統(tǒng)一稱為 SpringBoot 的自動(dòng)配置。

3.1自動(dòng)配置原理

我們從主程序入口來(lái)探索一下整個(gè)過(guò)程的原理:

@SpringBootApplication //標(biāo)注這個(gè)類是一個(gè) springboot 的應(yīng)用
public class MyApplication {
    public static void main(String[] args) {
        //將 springboot 應(yīng)用啟動(dòng)
        SpringApplication.run(MyApplication.class, args);
    }
}

@SpringBootApplication注解內(nèi)部結(jié)構(gòu)如下圖3-1所示:

圖3-1

我們可以去到上邊提到的spring.factories文件中去看一下,找到 spring 官方提供的spring-boot-autoconfigure包,再去找一下該文件,如圖3-2所示:

圖3-2

可以看到這個(gè)就是SpringBoot官方為我們提供的所有自動(dòng)配置類的候選列表。
我們可以在其中找到一個(gè)我們比較熟悉的自動(dòng)配置類去看一下它內(nèi)部的實(shí)現(xiàn),可以看到這些一個(gè)個(gè)的都是JavaConfig配置類,而且都通過(guò)@Bean注解向容器中注入了一些 Bean,如圖3-3所示:

圖3-3

小結(jié):

  • SpringBoot 在啟動(dòng)的時(shí)候從類路徑下的META-INF/spring.factories中獲取 EnableAutoConfiguration 指定的所有自動(dòng)配置類的全限定類名;
  • 整個(gè) J2EE 的全部解決方案和自動(dòng)配置都在spring-boot-autoconfigure的 jar 包中,將這些自動(dòng)配置類導(dǎo)入容器,自動(dòng)配置類就生效;
  • 上面2點(diǎn)會(huì)給容器中導(dǎo)入非常多的自動(dòng)配置類 (xxxAutoConfiguration), 就是給容器中導(dǎo)入這個(gè)場(chǎng)景需要的所有組件,并配置好這些組件 。

3.2自動(dòng)配置的過(guò)程

SpringBoot 中所有可配置項(xiàng)都集中在一個(gè)文件中(application.yml),這個(gè)文件中的配置通過(guò)@ConfigurationProperties注解來(lái)與我們程序內(nèi)部定義的 POJO

類來(lái)產(chǎn)生關(guān)聯(lián),這些 POJO 類統(tǒng)一命名為xxxProperties,并且這些xxxProperties類中各個(gè)屬性字段都有自己的默認(rèn)值。

這也是 SpringBoot 約定大于配置理念的體現(xiàn),盡可能減少開(kāi)發(fā)人員做選擇的次數(shù),但同時(shí)又不失靈活性。只要我們想,配置文件中的配置隨時(shí)可以覆蓋默認(rèn)值,如圖3-4所示:

圖3-4

小結(jié):

  • 首先容器會(huì)根據(jù)當(dāng)前不同的條件判斷,決定這個(gè)配置類是否生效;
  • 一但這個(gè)配置類生效,這個(gè)配置類就會(huì)給容器中添加相應(yīng)組件;
  • 這些組件的屬性是從對(duì)應(yīng)的 properties 類中獲取的,這些類里面的每一個(gè)屬性又是和配置文件綁定的;
  • 所有在配置文件中的屬性都是在 xxxxProperties 類中封裝著,配置文件可以配置什么內(nèi)容,可以參照該前綴對(duì)應(yīng)的屬性類中的屬性字段。

四、文章小結(jié)

到這里關(guān)于Spring Boot Starter 的應(yīng)用場(chǎng)景與自動(dòng)配置就分享完了,stater 的開(kāi)發(fā)和使用并不難,最重要的掌握使用場(chǎng)景和自動(dòng)配置,這樣無(wú)論是什么類型的 stater 都可以快速掌握運(yùn)用在項(xiàng)目里。

到此這篇關(guān)于Spring Boot Starter 的應(yīng)用場(chǎng)景與自動(dòng)配置的文章就介紹到這了,更多相關(guān)Spring Boot Starter配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot通過(guò)spel結(jié)合aop實(shí)現(xiàn)動(dòng)態(tài)傳參的案例

    springboot通過(guò)spel結(jié)合aop實(shí)現(xiàn)動(dòng)態(tài)傳參的案例

    SpEl 是Spring框架中的一個(gè)利器,Spring通過(guò)SpEl能在運(yùn)行時(shí)構(gòu)建復(fù)雜表達(dá)式、存取對(duì)象屬性、對(duì)象方法調(diào)用等,今天通過(guò)本文給大家介紹springboot?spel結(jié)合aop實(shí)現(xiàn)動(dòng)態(tài)傳參,需要的朋友可以參考下
    2022-07-07
  • java實(shí)現(xiàn)全局監(jiān)聽(tīng)鍵盤(pán)詳解

    java實(shí)現(xiàn)全局監(jiān)聽(tīng)鍵盤(pán)詳解

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)全局監(jiān)聽(tīng)鍵盤(pán)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • 簡(jiǎn)單了解springboot加載配置文件順序

    簡(jiǎn)單了解springboot加載配置文件順序

    這篇文章主要介紹了簡(jiǎn)單了解springboot加載配置文件順序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Mybatis傳list參數(shù)調(diào)用oracle存儲(chǔ)過(guò)程的解決方法

    Mybatis傳list參數(shù)調(diào)用oracle存儲(chǔ)過(guò)程的解決方法

    怎么利用MyBatis傳List類型參數(shù)到數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程中實(shí)現(xiàn)批量插入數(shù)據(jù)?接下來(lái)通過(guò)本文給大家介紹Mybatis傳list參數(shù)調(diào)用oracle存儲(chǔ)過(guò)程,需要的朋友可以參考下
    2017-03-03
  • Java中常見(jiàn)對(duì)象映射工具的使用詳解

    Java中常見(jiàn)對(duì)象映射工具的使用詳解

    對(duì)象映射是 Java 開(kāi)發(fā)中的重要環(huán)節(jié),尤其在處理數(shù)據(jù)轉(zhuǎn)換時(shí),就需要將一種結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換為另一種結(jié)構(gòu)的數(shù)據(jù)(例如 DTO 和 Entity 之間),在這篇博客中,我們將認(rèn)識(shí)并解析幾種常用的對(duì)象映射工具,并提供詳細(xì)樣例,需要的朋友可以參考下
    2025-03-03
  • Win11系統(tǒng)下載安裝java的詳細(xì)過(guò)程

    Win11系統(tǒng)下載安裝java的詳細(xì)過(guò)程

    這篇文章主要介紹了Win11如何下載安裝java,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java基礎(chǔ)之初識(shí)Maven

    Java基礎(chǔ)之初識(shí)Maven

    這篇文章主要介紹了Java基礎(chǔ)之初識(shí)Maven,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • 如何把spring boot項(xiàng)目部署到tomcat容器中

    如何把spring boot項(xiàng)目部署到tomcat容器中

    本文給大家分享如何把spring boot項(xiàng)目部署到tomcat容器中,本文給大家介紹的非常詳細(xì),需要的朋友參考下
    2017-04-04
  • SpringBoot修改yml配置和加載順序規(guī)則的示例詳解

    SpringBoot修改yml配置和加載順序規(guī)則的示例詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何修改yml配置和加載順序規(guī)則,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-08-08
  • JAVA通過(guò)XPath解析XML性能比較詳解

    JAVA通過(guò)XPath解析XML性能比較詳解

    本篇文章主要介紹了JAVA通過(guò)XPath解析XML性能比較詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02

最新評(píng)論

开远市| 鹰潭市| 石河子市| 浦县| 高平市| 合水县| 通河县| 余江县| 德江县| 裕民县| 离岛区| 阜康市| 韩城市| 禄劝| 旅游| 和政县| 保山市| 卢龙县| 东宁县| 永昌县| 宣武区| 桓仁| 天峨县| 万州区| 鄂温| 方城县| 临潭县| 南平市| 横山县| 安陆市| 光山县| 宁河县| 安阳县| 页游| 高唐县| 宾阳县| 尤溪县| 泽库县| 西乌珠穆沁旗| 吉林省| 霞浦县|