springboot自動裝配大概原理

来源:https://www.cnblogs.com/Weilaiqaq/archive/2023/04/25/17353571.html
-Advertisement-
Play Games

自動裝配: pom.xml spring-boot-dependence:核心都依賴在父類工程中! 我們在寫入或者引入springboot依賴的時候,不需要指定版,因為有這些倉庫的版本 啟動器: spring boot的啟動場景 比如spring-boot-starter-web,他就會幫我們導入w ...


自動裝配

pom.xml

  • spring-boot-dependence:核心都依賴在父類工程中!
  • 我們在寫入或者引入springboot依賴的時候,不需要指定版,因為有這些倉庫的版本

啟動器:------spring boot的啟動場景

  • 比如spring-boot-starter-web,他就會幫我們導入web環境蘇需要的依賴。
  • springboot會將所有的功能場景,都變成一個個啟動器。
  • 我們使用什麼功能,只需要找到對應的啟動器(starter)就可以了

主程式:

//springbootApplication:標註這個類是一個springboot的應用,啟動類下的所有資源被導入
@SpringBootApplication
public class HuangApplication {

    public static void main(String[] args) {
        SpringApplication.run(HuangApplication.class, args);
    }

}

註解:

@SpringBootConfiguration:springboot的配置
		@Configuration: sring配置類
		@@Component:說明這也是一個spring的組件
	
@@EnableAutoConfiguration: 自動配置
		@AutoConfigurationPackage:自動配置
		@Import(AutoConfigurationPackages.Registrar.class):導入選擇器
@Import({AutoConfigurationImportSelector.class}):自動導入選擇
//獲取所有的配置
List<String>configurations=this.getCandidateConfigurations(annotationMetadata, attributes);

獲取候選的配置:

protectedList<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
    List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));
    ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);
    Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
    return configurations;

自動配置的核心:

META-INF/spring.factories 

image-20230425161026515

Properties properties = PropertiessloaderUtils.loadProperties(resource);
所有資源載入到配置類中!

結論

​ springboot所有的自動配置都是在啟動的時候掃描並載入:spring.factoriess所有的自動配置類都在這裡面,但不一定全部啟動,要判斷條件是否成立,只要導入對應的start,就有對應的啟動器了,有了啟動器,我們的自動裝配就會生效,然後配置就會成功。

大概步驟

1.

spring boot在啟動的時候,從路徑下/META-INF/spring.factories獲取指定的值。

2.

將這些自動配置的類導入容器,自動配置就會生效,進行自動配置。

3.

以前我們需要自動配置的東西,現在都在springboot幫我們做。

4.

整合javaEE,解決方案和自動裝配的東西都在spring-boot-autofigure- 2.7.11.RELEASE.JAR這個包下麵

5.

他會把所有需要導入的組件,以類的方式返回,這些組件就會被添加到容器。

6.

容器中也會存在非常多的xxxAutoConfiguration的文件(@bean),就是這些類給容器中導入了這個場景需要的所有組件,並自動配置。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目一:在一個採用頁式虛擬存儲管理的系統中,有一用戶作業,它依次要訪問的頁面序列是1,2,3,4,1,2,5,1,2,3,4,5.假定分配給該作業的頁數為3且作業初始時未裝載頁面,那麼採用FIFO調度演算法產生的缺頁中斷數為多少,採用LRU調度演算法產生的缺頁中斷數為多少? 解析: FIFO調度演算法:先 ...
  • 簡介 代理模式(Proxy Pattern)是一種結構型設計模式,用一個類來代理另一個類或幾個類的功能。 在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能介面。 延遲初始化(虛擬代理)。如果你有一個偶爾使用的重量級服務對象,一直保持該對象運行會消耗系統資源時,可使用代理模式。 訪問控制( ...
  • PHP的類是單一繼承模式,也就是每個類只能繼承一個父類(基類)。 但有時需要引入更多通用(共用)的方法,同時這些方法又不適合集成到基類。 那麼這時,就需要使用其他方法來引入這些方法。其中trait,就是方法之一。 trait是PHP5.4之後出現的一種代碼復用方法,形式和Class非常相似,同時可以 ...
  • 最後的項目:多線程 Web 伺服器 構建多線程 Web 伺服器 在 socket 上監聽 TCP 連接 解析少量的 HTTP 請求 創建一個合適的 HTTP 響應 使用線程池改進伺服器的吞吐量 優雅的停機和清理 註意:並不是最佳實踐 創建項目 ~/rust ➜ cargo new hello Cre ...
  • /* *@author: Noiimplant *@version: 1.0 */ 1. 利用java實現簡易記賬軟體 根據尚矽谷java教程進行練習 2. 實現功能 記錄家庭支出、收入,列印收支明細表 使用分級菜單的方式 3. 代碼實現 3.1 GuliAccount.java package G ...
  • 服務啟動超時控制 問題描述: 服務有時存在等待很長時間起不來的情況,需要手動kill掉進程,然後再起一遍。 1 使用timeout指定命令運行的超時時間 timeout 30s java -jar while-1.0-SNAPSHOT.jar 腳本 #!/bin/bash timeout 30s j ...
  • 本文首發於公眾號:Hunter後端 原文鏈接:Django筆記三十之log日誌的記錄詳解 這一節介紹在 Django 系統里使用 logging 記錄日誌 以下是一個簡單的 logging 模塊示例,可以先預覽一下,接下來會詳細介紹各個模塊的具體功能: LOGGING = { 'version': ...
  • 在各種棋中,棋子的走法總是一定的,如中國象棋中馬走“日”。有一位小學生就想如果馬能有兩種走法將增加其趣味性,因此,他規定馬既能按“日”走,也能如象一樣走“田”字。他的同桌平時喜歡下圍棋,知道這件事後覺得很有趣,就想試一試,在一個(100*100)的圍棋盤上任選兩點A、B,A點放上黑子,B點放上白子, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...