深入解析 Spring 中的 BeanDefinition 和 BeanDefinitionRegistry

????????在 Spring 框架中,BeanDefinitionBeanDefinitionRegistry 是兩個非常重要的概念,它們共同構成了 Spring IoC 容器的核心機制。本文將詳細介紹這兩個組件的作用、實現以及它們之間的關系。

一、BeanDefinition:Bean 的配置描述

1.1 什么是 BeanDefinition

? ? BeanDefinition 是一個接口,用于描述一個 Spring 容器中 Bean 的配置元數據。它包含了以下關鍵信息:

  • 類名:Bean 的實現類。

  • 是否為抽象類:標識該 Bean 是否為抽象類。

  • 構造函數參數:Bean 的構造函數參數信息。

  • 屬性值:Bean 的屬性及其初始值。

  • 初始化方法和銷毀方法:定義了 Bean 的生命周期行為。

  • 作用域:如 singletonprototype

1.2 BeanDefinition 的實現

? ? BeanDefinition 有多個實現類,最常用的是 GenericBeanDefinition。它是一個通用的實現,提供了豐富的配置選項,可以方便地設置 Bean 的各種屬性。

1.3 創建 BeanDefinition

????????可以通過 BeanDefinitionBuilder 來動態創建 BeanDefinition。例如:

BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(User.class);
builder.addPropertyValue("name", "張三");
builder.addPropertyValue("age", 25);
GenericBeanDefinition beanDefinition = (GenericBeanDefinition) builder.getBeanDefinition();

二、BeanDefinitionRegistry:管理 BeanDefinition

2.1 什么是 BeanDefinitionRegistry

????BeanDefinitionRegistry 是一個接口,用于注冊和管理 BeanDefinition。它提供了以下方法:

  • registerBeanDefinition(String beanName, BeanDefinition beanDefinition):注冊一個新的 BeanDefinition。

  • removeBeanDefinition(String beanName):移除一個已注冊的 BeanDefinition。

  • getBeanDefinition(String beanName):獲取一個已注冊的 BeanDefinition。

2.2 BeanDefinitionRegistry 的實現

????????在 Spring 中,BeanDefinitionRegistry 的常見實現包括 DefaultListableBeanFactoryGenericApplicationContext。這些實現類提供了具體的注冊和管理邏輯。

2.3 使用場景

? ? BeanDefinitionRegistry 的一個典型使用場景是動態注冊 Bean。例如,通過實現 ImportBeanDefinitionRegistrar 接口,可以在 Spring 容器啟動時動態注冊 Bean:

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(User.class).getBeanDefinition();registry.registerBeanDefinition("user", beanDefinition);}
}

三、BeanDefinition 與 BeanDefinitionRegistry 的關系

????BeanDefinition 是 Bean 的配置描述,而 BeanDefinitionRegistry 是管理這些配置描述的注冊表。它們之間的關系可以類比為“員工信息”和“員工信息管理系統”:

  • BeanDefinition 是員工的信息,包括姓名、職位、技能等。

  • BeanDefinitionRegistry 是員工信息管理系統,用于存儲、檢索和管理這些信息。

四、總結

????BeanDefinitionBeanDefinitionRegistry 是 Spring IoC 容器的核心組件。BeanDefinition 描述了 Bean 的配置信息,而 BeanDefinitionRegistry 則負責管理和維護這些配置信息。通過理解這兩個組件,我們可以更好地掌握 Spring 容器的工作原理,以及如何通過動態注冊 Bean 來增強 Spring 應用的靈活性。

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

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

相關文章

《OpenCV》——光流估計

什么是光流估計? 光流估計的前提? 基本假設 亮度恒定假設:目標像素點的亮度在相鄰幀之間保持不變。這是光流計算的基礎假設,基于此可以建立數學方程來求解光流。時間連續或運動平滑假設:相鄰幀之間的時間間隔足夠小&a…

信息系統的安全防護

文章目錄 引言**1. 物理安全****2. 網絡安全****3. 數據安全****4. 身份認證與訪問控制****5. 應用安全****6. 日志與監控****7. 人員與管理制度****8. 其他安全措施****9. 安全防護框架**引言 從技術、管理和人員三個方面綜合考慮,構建多層次、多維度的安全防護體系。 信息…

如何進行OceanBase 運維工具的部署和表性能優化

本文來自OceanBase 用戶的實踐分享 隨著OceanBase數據庫應用的日益深入,數據量不斷攀升,單個表中存儲數百萬乃至數千萬條數據的情況變得愈發普遍。因此,部署專門的運維工具、實施針對性的表性能優化策略,以及加強指標監測工作&…

如何防止 Instagram 賬號被盜用:安全設置與注意事項

如何防止 Instagram 賬號被盜用:安全設置與注意事項 在這個數字化時代,社交媒體平臺如 Instagram 已成為我們日常生活的一部分。然而,隨著網絡犯罪的增加,保護我們的在線賬戶安全變得尤為重要。以下是一些關鍵的安全設置和注意事…

Redis|復制 REPLICA

文章目錄 是什么能干嘛怎么玩案例演示復制原理和工作流程復制的缺點 是什么 官網地址:https://redis.io/docs/management/replication/Redis 復制機制用于將數據從一個主節點(Master)復制到一個或多個從節點(Slave)&a…

對象存儲之Ceph

Ceph 對象存儲概述 Ceph 是一個開源分布式存儲系統,旨在提供高度可擴展、高度可用、容錯、性能優異的存儲解決方案。它結合了塊存儲、文件系統存儲和對象存儲的功能,且在設計上具有極高的可擴展性和靈活性。 在 Ceph 中,對象存儲&#xff0…

Document對象

DOM4j中,獲得Document對象的方式有三種: 1.讀取XML文件,獲得document對象 SAXReader reader new SAXReader(); Document document reader.read(new File("input.xml")); 2.解析XML形式的文本,得到document對象…

樹莓集團南京產業園再布局:深入剖析背后邏輯

在產業園區蓬勃發展的當下,樹莓集團在南京的產業園再布局行動備受矚目。這一舉措并非偶然,其背后蘊含著深刻且多元的戰略邏輯。 一、順應區域產業發展趨勢 南京作為長三角地區的重要城市,產業基礎雄厚且多元。近年來,南京大力推動…

Pytorch實現之腦電波圖像生成

簡介 簡介:采用雙GAN模型架構來生成腦電波與目標圖像。 論文題目:Image Generation from Brainwaves using Dual Generative Adversarial Training(使用雙生成對抗訓練的腦電波圖像生成) 會議:IEEE Global Conference on Consumer Electronics (GCCE) 摘要:表示通過無…

HTML解析 → DOM樹 CSS解析 → CSSOM → 合并 → 渲染樹 → 布局 → 繪制 → 合成 → 屏幕顯示

一、關鍵渲染流程 解析 HTML → 生成 DOM 樹 瀏覽器逐行解析 HTML&#xff0c;構建**DOM&#xff08;文檔對象模型&#xff09;**樹狀結構 遇到 <link> 或 <style> 標簽時會暫停 HTML 解析&#xff0c;開始加載 CSS 解析 CSS → 生成 CSSOM 將 CSS 規則解析為**…

劍指offer - 面試題11 旋轉數組的最小數字

題目鏈接&#xff1a;旋轉數組的最小數字 第一種&#xff1a;正確寫法&#xff08;num[m]和nums[r]比較&#xff09; class Solution { public:/*** 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回方法規定的值即可** * param nums int整型v…

Spring源碼分析の循環依賴

文章目錄 前言一、循環依賴問題二、循環依賴的解決三、整體流程分析 前言 常見的可能存在循環依賴的情況如下&#xff1a; 兩個bean中互相持有對方作為自己的屬性。 ??類似于&#xff1a; 兩個bean中互相持有對方作為自己的屬性&#xff0c;且在構造時就需要傳入&#xff1a…

Docker 部署 Jenkins持續集成(CI)工具

[TOC](Docker 部署 Jenkins持續集成(CI)工具) 前言 Jenkins 是一個流行的開源自動化工具&#xff0c;廣泛應用于持續集成&#xff08;CI&#xff09;和持續交付&#xff08;CD&#xff09;的環境中。通過 Docker 部署 Jenkins&#xff0c;可以簡化安裝和配置過程&#xff0c;并…

《Effective Objective-C》閱讀筆記(中)

目錄 接口與API設計 用前綴避免命名空間沖突 提供“全能初始化方法” 實現description方法 盡量使用不可變對象 使用清晰而協調的命名方式 方法命名 ?編輯類與協議命名 為私有方法名加前綴 理解OC錯誤模型 理解NSCopying協議 協議與分類 通過委托與數據源協議進行…

C++程序員內功修煉——Linux C/C++編程技術匯總

在軟件開發的宏大版圖中&#xff0c;C 語言宛如一座巍峨的高山&#xff0c;吸引著無數開發者攀登探索。而 Linux 操作系統&#xff0c;以其開源、穩定、高效的特性&#xff0c;成為了眾多開發者鐘愛的開發平臺。將 C 與 Linux 相結合&#xff0c;就如同為開發者配備了一把無堅不…

數據庫索引:缺點與類型全解析

在數據庫的世界里&#xff0c;索引就像是一本書的目錄&#xff0c;它能幫助我們快速定位到所需的數據&#xff0c;極大地提升查詢效率。然而&#xff0c;就如同任何事物都有兩面性一樣&#xff0c;索引也并非完美無缺。今天&#xff0c;我們就來深入探討一下索引的缺點以及常見…

【python】提取word\pdf格式內容到txt文件

一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""讀取 PDF 文件內容:param file_path: PDF 文件路徑:return: 文件內容文本"""try:text ext…

嵌入式八股文(五)硬件電路篇

一、名詞概念 1. 整流和逆變 &#xff08;1&#xff09;整流&#xff1a;整流是將交流電&#xff08;AC&#xff09;轉變為直流電&#xff08;DC&#xff09;。常見的整流電路包括單向整流&#xff08;二極管&#xff09;、橋式整流等。 半波整流&#xff1a;只使用交流電的正…

精選案例展 | 智己汽車—全棧可觀測驅動智能化運營與成本優化

本案例為“觀測先鋒 2024 可觀測平臺創新應用案例大賽”精選案例&#xff0c;同時榮獲IT168“2024技術卓越獎評選-年度創新解決方案”獎。 項目背景 近年來&#xff0c;中國汽車行業進入轉型升級階段&#xff0c;智能網聯技術成為行業發展的核心。車聯網、自動駕駛等技術的加速…

速通HTML

目錄 HTML基礎 1.快捷鍵 2.標簽 HTML進階 1.列表 a.無序列表 b.有序列表 c.定義列表 2.表格 a.內容 b.合并單元格 3.表單 a.input標簽 b.單選框 c.上傳文件 4.下拉菜單 5.文本域標簽 6.label標簽 7.按鈕標簽 8.無語義的布局標簽div與span 9.字符實體 HTML…