SpringBoot自動注入配置類初步實現

一.SpringBoot自動裝配

? ? ? ? SpringBoot 的?自動裝配(Auto-Configuration)?是它的核心特性之一,它讓開發者可以?"開箱即用",避免手動配置大量的 XML 或 Java Config。它的核心思想是:

"約定優于配置"(Convention Over Configuration)
"按需加載"(Conditional Loading)

? ? ? ?簡單理解就是"按需裝配"——你有啥我就配啥,你缺啥我就補啥,你自己配了我就用你的。這樣開發者只需要關注自己需要改的部分,其他都用合理的默認值。

? ? ? ?那這些自動配置類如何注入到項目中呢?下面模擬了自動配置類注入的過程。

二.如何實現

1.簡易版本

package com.example.springdemo.demos.a04;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.annotation.Import;
import org.springframework.context.support.GenericApplicationContext;/*** @author zhou* @version 1.0* @description TODO* @date 2025/8/15 21:30*/
public class TestAutoConfiguration {public static void main(String[] args) {GenericApplicationContext context = new GenericApplicationContext();context.registerBean("config",Config.class);//添加bean工廠后處理器context.registerBean(ConfigurationClassPostProcessor.class);context.refresh();for (String name:context.getBeanDefinitionNames()) {System.out.println(name);}}@Configuration //本項目配置類@Import({AutoConfiguration1.class,AutoConfiguration2.class})static class Config{}@Configurationstatic class AutoConfiguration1{@Beanpublic Bean1 bean1(){return new Bean1();}}@Configurationstatic class AutoConfiguration2{@Beanpublic Bean2 bean2(){return new Bean2();}}
}

? Bean1

package com.example.springdemo.demos.a04;/*** @author zhou* @version 1.0* @description TODO* @date 2025/8/15 21:32*/
public class Bean1 {
}

? Bean2

package com.example.springdemo.demos.a04;/*** @author zhou* @version 1.0* @description TODO* @date 2025/8/15 21:32*/
public class Bean2 {
}

自動注入配置類實現思路:

  • 創建容器
  • 添加bean工廠后處理器
  • 創建配置類(項目所需特有配置類)
  • 創建自動配置類(每個項目常用的公共類)
  • 使用@Import注解導入自動配置類到項目配置類里面
  • 輸出結果
config
org.springframework.context.annotation.ConfigurationClassPostProcessor
com.example.springdemo.demos.a04.TestAutoConfiguration$AutoConfiguration1
bean1
com.example.springdemo.demos.a04.TestAutoConfiguration$AutoConfiguration2
bean2

? ? ?容器里面不僅有我們自己的配置類,還有通過自動注入的配置類。

2.改進實現

? ?使用MyImportSelector類導入自動配置類

@Configuration //本項目配置類@Import({MyImportSelector.class})static class Config{}
static class MyImportSelector implements ImportSelector{@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//返回配置類的類名return new String[]{AutoConfiguration1.class.getName(),AutoConfiguration2.class.getName()};}}

3.自動配置類寫入配置文件

? ? ? ?在resource的META-INF下新建一個spring.factories文件,key為導入類的類路徑,值為自動配置類的類路徑。

com.example.springdemo.demos.a04.TestAutoConfiguration.MyImportSelector=\
com.example.springdemo.demos.a04.TestAutoConfiguration.AutoConfiguration1,\
com.example.springdemo.demos.a04.TestAutoConfiguration.AutoConfiguration2

? ? ? ?但是這里有一點比較特殊,我的導入類是一個內部類,鍵的最后的一個點得改為$,否則會失效。

com.example.springdemo.demos.a04.TestAutoConfiguration$MyImportSelector=\
com.example.springdemo.demos.a04.TestAutoConfiguration.AutoConfiguration1,\
com.example.springdemo.demos.a04.TestAutoConfiguration.AutoConfiguration2

? ? ? ?MyImportSelector類通過SpringFactoriesLoader加載配置文件里面的類。這樣就方便拓展,而不用寫死。

static class MyImportSelector implements ImportSelector{@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//返回配置類的類名List<String> names = SpringFactoriesLoader.loadFactoryNames(MyImportSelector.class,null);return names.toArray(new String[0]);}}

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

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

相關文章

直播預告|鴻蒙生態中的AI新玩法

想知道鴻蒙生態里 AI 能玩出啥新花樣&#xff1f; 8 月 14 日&#xff08;周四&#xff09;20:00 &#xff0c;「開發者?面對面 堅果派特輯 —— 鴻蒙生態中的 AI 新玩法」直播來襲&#xff01; &#x1f50d; 直播亮點搶先看 AI賦能鴻蒙產品開發&#xff1a;將分享如何利用AI…

智能合約:區塊鏈時代的“數字契約革命”

一、技術原理與核心特征1. 定義與本質智能合約是運行在區塊鏈上的自動化程序&#xff0c;通過代碼定義業務規則&#xff0c;在預設條件滿足時自動執行操作&#xff08;如資金轉移、信息更新&#xff09;&#xff0c;無需人工干預。其核心特性包括&#xff1a;自動執行&#xff…

【數據分析】比較SparCC、Pearson和Spearman相關性估計方法在合成組學數據上的表現

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 加載R包 模擬數據 構建網絡 RMSE指數計算 畫圖 總結 系統信息 介紹 在生物信息學和生態學研究中,組學數據的分析越來越依賴于對微生物群落或基因表達數據中物種或基因間相關性的…

Google C++ 風格指南

文章目錄背景介紹風格指南的目標C 版本頭文件自包含頭文件#define 防護包含所需內容前置聲明在頭文件中定義函數頭文件包含順序與命名規范作用域命名空間內部鏈接非成員函數、靜態成員函數與全局函數局部變量靜態與全局變量關于析構的決策關于初始化的決策常見模式thread_local…

安裝部署_WVP流媒體

文章目錄一、DEV_WVP流媒體開發手冊1、搭建流媒體服務clone代碼&#xff1a;安裝編譯器cmake構建和編譯項目修改配置文件啟動項目2、搭建GB28181協議視頻平臺安裝 jdk, nodejs, maven, git安裝redis安裝postgresqlclone代碼編譯前端代碼編譯后端代碼配置文件修改3、設備接入測測…

軟件I2C實現(2):I2C協議實現

0 參考資料 I2C 總線規范.pdf 1 I2C協議實現 1.1 SCL、SDA引腳初始化 將SCL、SDA初始化為開漏輸出,電平設置為高電平(使用外部上拉電阻拉高)。 /*** @brief 軟件I2C初始化** @param sw_i2c_cfg 軟件I2C配置指針*/ int sw_i2c_init(sw_i2c_cfg_t *sw_i2c_cfg) {GPIO_InitT…

瘋狂星期四文案網第40天運營日記

網站運營第40天&#xff0c;點擊觀站&#xff1a; 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 今日訪問量 今日搜索引擎收錄情況 必應秒發秒收 百度收錄很慢 網站優化點 優化seo 修復已知bug

【大語言模型 01】注意力機制數學推導:從零實現Self-Attention

注意力機制數學推導&#xff1a;從零實現Self-Attention - 開啟大語言模型的核心密碼 關鍵詞&#xff1a;注意力機制、Self-Attention、Transformer、數學推導、PyTorch實現、大語言模型、深度學習 摘要&#xff1a;本文從數學原理出發&#xff0c;詳細推導Self-Attention的完整…

2025 環法戰車科技對決!維樂 Angel Glide定義舒適新標

環法賽場不僅是頂尖車手的競技舞臺&#xff0c;更是自行車科技的時尚秀場。然而經常騎行的朋友都知道&#xff0c;當頂級戰車遇上專業坐墊&#xff0c;方能成就完美騎行體驗。2025 年環法賽場上的新戰車們各展神通&#xff0c;而維樂 Angel Glide 坐墊以其獨特的科技與設計&…

VS Code配置MinGW64編譯ALGLIB庫

VS Code用MinGW64編譯C代碼安裝MSYS2軟件并配置ALGLIB庫和測試引用庫代碼的完整具體步驟。 1. 安裝 MSYS2 下載 MSYS2&#xff1a; 訪問 MSYS2 官網下載最新安裝包&#xff08;如 msys2-x86_64-latest.exe&#xff09; 安裝&#xff1a; 運行安裝程序&#xff0c;默認路徑為 C…

《WINDOWS 環境下32位匯編語言程序設計》第2章 準備編程環境

2.1 Win32可執行文件的開發過程 在DOS下&#xff0c;生成一個可執行文件的步驟比較簡單&#xff0c;用編譯器將源程序編譯為obj文件&#xff0c;再用鏈接器將obj文件鏈接成exe文件&#xff0c;不同語言的開發過程都差不多。 DOS可執行文件中的內容是由源程序中所寫的代碼和數…

kubernetes(4) 微服務

一、什么是微服務在 Kubernetes 中&#xff0c;控制器負責維持業務副本&#xff0c;但真正把業務“暴露”出去的是 Service。 一句話理解&#xff1a;Service 一組 Pod 的穩定訪問入口 4 層負載均衡Ingress 7 層路由 統一入口 灰度 / 認證 / 重寫等高級能力默認情況下&…

Pandas 2.0 + Arrow 加速、Dask vs Ray、Plotly 可視化:數據分析的未來

在大數據與人工智能時代,數據分析與可視化的技術棧正在快速演進。過去十年,Pandas 幾乎是數據科學家的“瑞士軍刀”,Matplotlib 和 Seaborn 是最常用的可視化工具。但如今,隨著數據規模與分析需求的增長,新的趨勢正在出現: Pandas 2.0 引入 Apache Arrow 后端,性能顯著提…

windows擴展(外接)顯示器位置調節

概述有的時候我們想把屏幕往左或往右拖動&#xff0c;默認情況下&#xff0c;屏幕都是默認往右拖動的&#xff0c;如果想往左拖動&#xff0c;則需要進行設置。具體步驟如下&#xff1a;當然不止這些還可以往上調&#xff0c;下調等多個位置可調至&#xff0c;這里只顯示左右調…

【分數求和2】

題目&#xff1a;分數求和&#xff08;1/22/33/44/55/66/77/88/9&#xff09;代碼實現&#xff1a;#include <stdio.h>int main(){double sum 0.0;int i;for(i2;i<10;i){sum((i-1.0)/i);}printf("1/22/33/44/55/66/77/88/9%f\n",sum);return 0;} 注&#x…

軟件SPI實現(3):SPI協議測試(使用W25Q64)

0 參考資料 SPI通信協議中文版(SPIV3).pdf 1 SPI協議測試(使用W25Q64) 1.1 測試方法 這里使用W25Q64作為SPI從機,測試實現的軟件SPI工作是否正常。測試步驟如下: (0)使用SPI模式0 (1)使用sw_spi_tx_rx_nbyte API向W25Q64起始地址0寫入32字節數據 (2)使用sw_spi_tx_…

Redis 04 Reactor

Reactor 設計模式是事件驅動的并發處理模式&#xff0c;高效處理多個輸入源的請求。多路分解事件&#xff0c;同步分發到處理器。 單線程 reactor 模型 redis6.0 之前采用單線程 reactor 模型。即業務線程完成網絡IO及命令處理。 reactor 模型處理三類事件&#xff1a; 連接事件…

基于多分類的工業異常聲檢測及應用

摘 要 隨著工業4.0的快速發展&#xff0c;工業設備的智能化監測與維護成為保障生產安全與效率的關鍵環節。工業異常聲檢測作為一種非侵入式、實時性強的監測手段&#xff0c;能夠有效識別設備運行中的潛在故障&#xff0c;具有重要的應用價值。本文提出了一種基于多分類的工業…

AirReceiverLite:輕松實現手機隔空投屏

在多設備互聯的今天&#xff0c;屏幕鏡像功能成為了許多用戶在演示、教學、娛樂等場景中的重要需求。AirReceiverLite作為一款運行在Android平臺上的應用程序&#xff0c;為用戶提供了便捷的解決方案。它允許用戶通過AirPlay協議將iPhone、iPad、Macbook等iOS設備以及Windows P…

雙指針和codetop復習

雙指針和codetop復習1.雙指針1.[移動零](https://leetcode.cn/problems/move-zeroes/description/)遞歸1.[計算布爾二叉樹的值](https://leetcode.cn/problems/evaluate-boolean-binary-tree/)2.[Pow(X,n)](https://leetcode.cn/problems/powx-n/)3.[兩兩交換鏈表中的節點](htt…