SpringBoot的依賴管理和自動配置

與其明天開始,不如現在行動!

文章目錄

    • 1 依賴管理機制
    • 2 自動配置機制
      • 2.1 初步理解
      • 2.2 完整流程
  • 💎總結


1 依賴管理機制

  1. 為什么導入starter-web后所有相關依賴都會導入進來?

    1. 開發什么場景,導入什么場景啟動器-spring-boot-starter-
    2. maven依賴傳遞原則,a-b-c:a就擁有c
    3. 導入一個場景啟動器,就會自動把整個場景的所有核心依賴全部導入進來
  2. 為什么版本號都不用寫?

    1. 每個boot項目都有一個父項目:spring-boot-starter-parent

    2. parent的父項目是:spring-boot-dependencies

    3. 在里面版本仲裁中心就寫好了每個jar包的版本

    4. 要自定義版本號

      1. 直接在依賴下面聲明版本號
      2. 利用maven的就近原則
        • 直接在當前項目使用<properties>標簽
      <properties><mysql.version>8.0.31</mysql.version>
      </properties>
      
    5. 第三方jar包要自己聲明

image-20231206142937666

2 自動配置機制

2.1 初步理解

  1. 自動配置的Tomcat、SpringMVC等
    1. 以前:要配置一堆的組件
    2. 現在:SpringBoot自動配置好這些組件,容器中有了什么組件,就具有什么功能
    3. 導入場景,容器中就會自動配置好這個場景的核心組件
  2. 默認的包掃描規則
    1. @SpringBootApplication注解的類就是主程序
    2. SpringBoot只會掃描主程序所在的包及其下面的子包:com.wen.usercenter及其子包
  3. 配置默認值
    1. 配置文件(如:application.properties)的所有配置項是和某個類的對象值進行一一綁定的
    2. 綁定了配置文件中每一項值的類:配置屬性類
  4. 按需加載自動配置
    1. 導入場景spring-boot-starter-web
    2. 場景啟動器除了會導入相關依賴,還導入一個spring-boot-starter,是所有starterstarter,基礎核心starter
    3. spring-boot-starter導入了一個包spring-boot-autoconfigure。包里面都是各種場景的AutoConfiguration自動配置類
    4. 雖然全場景的自動配置都在spring-boot-autoconfigure這個包,但是不是全部開啟的。導入哪個場景就開啟哪個。

總結:導入場景啟動器,觸發spring-boot-autoconfigure這個包的自動配置生效,容器中就會具有相關的功能

2.2 完整流程

思考:

  1. SpringBoot怎么實現導入一個starter,寫一些簡單的配置,應用就能跑起來,我們無需關心整合?
  2. 為什么Tomcat的端口號可以配置在application.properties中,并且Tomcat能啟動成功?
  3. 導入場景后哪些自動配置能生效?

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

流程:

  1. 導入stater:導入了web開發場景
    1. 場景啟動器導入了相關場景的所有依賴:starter-jsonstarter-tomcatspringmvc
    2. 每個場景啟動器都引入了一個spring-boot-starter核心場景啟動器
    3. 核心場景啟動器引入了spring-boot-autoconfigure自動配置包,里面囊括了所有場景的所有配置
    4. 只要這個包下的所有類都能生效,那么相當于SpringBoot官方寫好的整合功能就生效了
    5. SpringBoot默認掃描不到spring-boot-autoconfigure下寫好的所有配置類
  2. 主程序:@SpringBootApplication
    1. @SpringBootApplication由三個注解組成:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
    2. SpringBoot默認掃描不到spring-boot-autoconfigure下寫好的所有配置類
    3. @EnableAutoConfiguration:SpringBoot開啟自動配置的核心。
      1. 是由@Import({AutoConfigurationImportSelector.class})提供功能:批量給容器中導入組件
      2. SpringBoot啟動會默認加載142個配置類
      3. 這142個配置類來自于spring-boot-autoconfigure包下META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件指定的所有類
      4. 項目啟動的時候利用@Import批量導入組件機制把autoconfigure包下的142個xxxAutoConfiguration類導入進來(自動配置類)
      5. 按需生效:
        1. 雖然導入了142個自動配置類,但是并不是都能生效
        2. 每個自動配置類,都有條件注解@ConditionOnXxx,只有條件成立,才能生效
      6. xxxAutoConfiguration自動配置類
        1. 給容器中使用@Bean放一堆組件
        2. 每個自動配置類都有可能由注解:@EnableConfigurationProperties(ServerProperties.class),用來把配置文件中配的指定前綴的屬性值封裝到xxxProperties屬性類
        3. 以Tomcat為例,把服務器的所有配置都是以server開頭的。配置都封裝到屬性類中
        4. 給容器中放的所有組件的一些核心參數,都來自于xxxPropertiesxxxProperties都適合配置文件綁定的
        5. 只需要改配置文件的值,核心組件的底層參數都能修改
  3. 寫業務,無需關心各種整合(底層這些整合都寫好了,而且也生效了)

核心流程:

  1. 導入starter,就會導入autoconfigure
  2. autoconfigure包里面有一個文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,里面指定了所有啟動要加載的自動配置類
  3. @EnableAutoConfiguration會自動的把上面文件里面寫的所有自動配置類都導入進來。
  4. xxxAutoConfiguration給容器中導入很多組件,根據條件注解按需加載 ,組件都是從xxxProperties中提取屬性值
  5. xxxProperties又是和配置文件進行綁定

效果:導入starter、修i該配置文件、就能修改底層行為


💎總結

本文中若是有出現的錯誤請在評論區或者私信指出,我再進行改正優化,如果文章對你有所幫助,請給博主一個寶貴的三連,感謝大家😘!!!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211225.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vscode調試pytorch分布式訓練

launch.json文件如下"cwd" "${fileDirname}"表示代碼調試的根目錄是當前你調試的文件&#xff0c;也就是pretrain.py所在的目錄。其他路徑參數都是相對這個目錄的 如果改成"cwd" "${workspaceFolder}" 表示代碼調試的根目錄是打開的工…

【Python百寶箱】構筑銅墻鐵壁:Python 認證與授權庫實戰指南

Python認證與授權&#xff1a;構建安全、可擴展的應用 前言 在當今數字化時代&#xff0c;用戶認證和授權是構建安全、可信任的應用程序的基石。Python生態系統提供了豐富而強大的庫和工具&#xff0c;以支持多種身份驗證和授權方案。本文將深入探討一系列Python庫&#xff0…

MyBatis框架中的5種設計模式總結

前言 MyBatis框架中使用的5種設計模式分別是&#xff1a;1、建造者模式&#xff08;生成器模式&#xff09;。2、工廠模式。3、單例模式。4、代理模式。5、適配器模式。 1、建造者模式&#xff08;生成器模式&#xff09; 在MyBatis環境的初始化過程中&#xff0c;SqlSessio…

Redis 環境搭建2

文章目錄 第2關&#xff1a;使用 Redis 第2關&#xff1a;使用 Redis 本文是接著上篇文章寫的第二關代碼&#xff0c;部分人再進入第二關時不會保留第一關的配置的環境&#xff0c;可以通過下面一句代碼進行檢驗。 redis-cli -p 7001 -c如果進入到了redis界面就是有環境&…

問題:batchnormal訓練單個batch_size就會報錯嗎

Batch Normalization&#xff08;批標準化&#xff09;是一種深度學習中的正則化技巧&#xff0c;它可以改進網絡的訓練過程。在訓練神經網絡時&#xff0c;Batch Normalization可以幫助解決內部協變量偏移&#xff08;Internal Covariate Shift&#xff09;的問題。 在標準的…

pytorch serve開始-Getting started

官網鏈接 Getting started — PyTorch/Serve master documentation 安裝TorchServe和torch-model-archiver 安裝依賴 注意::對于Conda&#xff0c;運行Torchserve需要Python >3.8。 對于基于Debian的系統/ MacOS CPU python ./ts_scripts/install_dependencies.py 對…

【Hadoop】高可用集群搭建

知識目錄 一、寫在前面&#x1f495;二、Zookeeper安裝?三、Hadoop配置?四、Hadoop HA自動模式?五、HA腳本分享?七、結語&#x1f495; 一、寫在前面&#x1f495; 大家好&#xff01;這篇文章是我在搭建Hdfs的HA(高可用)時寫下的詳細筆記與感想&#xff0c;希望能幫助到大…

Notes數據直接在Excel中統計

大家好&#xff0c;才是真的好。 我希望你看過前面兩篇內容《Domino REST API安裝和運行》和《Domino REST API安裝和運行》&#xff0c;因為今天我們正是使用REST API方式在Excel中查詢和統計Notes數據。 不過首先你得知道一個OData協議&#xff0c;全名Open Data Protocol(…

五花八門客戶問題(BUG) - 用好strace2

目錄 前言 strace與gdb的沖突 細看strace 前言 上文通過strace trace它自個看到了strace的原理:確實是調用了ptrace函數實現的。今天我們再細看一看。 strace與gdb的沖突 既然它兩底層都是用ptrace,那么一定不能同時用在同一個進程上。實例驗證: [root]# strace sleep…

布隆過濾器,Redis之 bitmap,場景題【如果微博某個大V發了一條消息,怎么統計有多少人看過了】

文章目錄 一、什么是 bitmap1-1、Bitmap 相關命令二、bitmap 和 set 對比2-1、數據準備2-2、內存對比2-3、性能對比三、布隆過濾器3-1、理論主要作用如何將數據放到過濾器內呢?注意事項布隆過濾器 有兩個重要的參數3-2、代碼實現3-3、Java中的hash函數最近面試,面試官問了一個…

Windows系統Java開發環境安裝

總結一下Java軟件開發工程師常見的環境的安裝&#xff0c;僅限Windows環境。 以下下載鏈接均來自官網&#xff0c;網絡條件自己克服。 目錄 1. JDKJDK Oracle 官網下載地址配置系統環境變量 2. Mavenapache maven 官網地址本地倉庫和中央倉庫配置配置系統環境變量 3. GitGit 官…

springboot3 liquibase SQL執行失敗自動回滾,及自動打tag

一&#xff1a; 自動執行回滾&#xff0c; 已執行成功的忽略&#xff0c;新sql執行失敗則執行新sql文件中的回滾sql pom.xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.25.0&…

【工廠方法】設計模式項目實踐

前言 以采集數據處理邏輯為例&#xff0c;數據采集分為不同種類如&#xff1a;MQTT、MODBUS、HTTP等&#xff0c;不同的采集數據有不同的解析處理邏輯。但總體解析處理步驟是固定的。可以使用工廠方法設計模式簡化代碼&#xff0c;讓代碼變得更加優雅。 代碼實踐 抽象類 總體…

分布式環境下的session 共享-基于spring-session組件和Redis實現

1、問題概述 不是所有的項目都是單機模式的&#xff0c;當一個項目服務的局域比較廣&#xff0c;用戶體量比較大&#xff0c;數據量較大的時候&#xff0c;我們都會將項目部署到多臺服務器上&#xff0c;這些個服務器都是分布在不同的區域&#xff0c;這樣實現了項目的負載和并…

Redis有序集合對象

一.編碼 有序集合的編碼可以是ziplist或者skiplist。 ziplist編碼的有序集合對象使用壓縮列表作為底層實現&#xff0c;每一個集合元素使用緊挨在一起的兩個壓縮列表節點來保存。第一個節點保存元素的成員(member)&#xff0c;而第二個元素則保存元素的分值(score)。 127.0.0.…

鴻蒙app獲取文本控件按鈕控件_修改控件名稱_按鈕觸發事件_提示信息顯示

鴻蒙app獲取文本控件按鈕控件_修改控件名稱_按鈕觸發事件_ 點擊啟動&#xff1a;提示信息顯示 package com.example.myapplication.slice;import com.example.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; impor…

12.1電梯控制器——文檔記錄

《數字邏輯》實驗報告 實驗名稱 項目三 電梯控制器設計 一、實驗目的 設計一個多樓層的電梯控制器系統&#xff0c;并能在開發板上模擬電梯運行狀態。可以利用按鍵作為呼叫按鍵&#xff0c;數碼管顯示電梯運行時電梯所在樓層&#xff0c;led燈顯示樓層叫梯狀態。 二、實…

太良心了!微軟面向初學者,開源機器學習、數據科學、AI、LLM

大家好&#xff0c;推薦幾個質量上乘且完全免費的微軟開源課程&#xff0c;由粉絲小伙伴梳理&#xff0c;分享給大家。 文末可以加我們粉絲群 面向初學者的機器學習課程 ML for beginners banner 地址&#xff1a;https://microsoft.github.io/ML-For-Beginners/#/ 學習經典…

[Linux] Web基礎知識與http協議

一、HTML 1.1 HTML 的概念 HTML被稱為超文本標記語言。 它是規范和標準. 它通過標記符號來標記網頁中出現的各個部分。網頁文件本身就是一種文本文件。 通過向文本文件添加標記&#xff0c;您可以告訴瀏覽器如何顯示其中的內容。 HTML命令可以描述文本、圖形、動畫、聲音、表格…

講解把一個文件夾里面的內容復制到另一個文件夾中的操作

&#x1f38a;專欄【Java小練習】 &#x1f354;喜歡的詩句&#xff1a;天行健&#xff0c;君子以自強不息。 &#x1f386;音樂分享【如愿】 &#x1f384;歡迎并且感謝大家指出小吉的問題&#x1f970; 文章目錄 &#x1f354;需求?思路?代碼?效果 &#x1f384;如果要復制…