BeanFactoryApplicationContext之間的關系

1**.BeanFactory與ApplicationContext之間的關系**

在這里插入圖片描述

(1)從繼承關系上來看:

? BeanFactory它是ApplicationContext 的父接口

(2)從功能上來看:

? BeanFactory才是spring中的核心容器,而ApplicationContext 是組合或者說是借助了(繼承)了BeanFactory的功能。

1.1什么是BeanFactory?

表面上我們用到了getbean方法

實際上:IOC,DI以及Bean的生命周期的各種功能都有它的實現類提供的。

補充:

這個實現類是誰==》DefaultListableBeanFactory

在這里插入圖片描述

關于DefaultListableBeanFactory

它有一個繼承的接口DefaultSingletonBeanRegistry,該類的有一個成員變量用來存放單例的Bean

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

在這段代碼中,singletonObjects 是一個 ConcurrentHashMap 類型的對象,它是線程安全的哈希表實現。ConcurrentHashMap 允許多個線程同時進行讀取和寫入操作,保證了并發訪問的安全性。
該 Map 的鍵為字符串類型,表示 bean 的名字或唯一標識符,值為 Object 類型,表示對應的 bean 實例。通過使用鍵值對的方式來存儲和管理 bean 實例,我們可以使用 bean 的名字作為鍵來快速查找和訪問對應的 bean。
這是 Spring 容器內部的一個數據結構,用于存儲已經創建的單例 bean 實例。當需要獲取一個單例 bean 時,Spring 會首先在 singletonObjects 中查找,如果存在則直接返回,否則會創建新的實例并放入 singletonObjects 中緩存起來,以便下次使用。

標準一點回答:

BeanFactory 是 Spring 框架中的一種核心機制,用于管理和提供應用程序中的對象實例,也被稱為 bean。

在 Spring 中,我們可以通過配置文件或注解定義各種 bean 對象,這些 bean 對象可以是服務、數據訪問對象(DAO)、控制器等。BeanFactory 的作用是在應用程序運行時負責創建、管理和提供這些 bean 實例。

BeanFactory 主要提供以下功能:

  1. Bean 實例化:BeanFactory 負責根據配置信息或注解來實例化 bean 對象。它會根據 bean 的定義和配置信息,使用適當的實例化策略(如構造函數實例化、工廠方法實例化等)創建 bean 的實例。
  2. 依賴注入:BeanFactory 負責管理 bean 之間的依賴關系。通過配置文件或注解,我們可以聲明 bean 之間的依賴關系,BeanFactory 在創建 bean 實例時自動處理這些依賴,將依賴的對象注入到需要的位置。
  3. 生命周期管理:BeanFactory 管理 bean 的生命周期。它負責調用 bean 的初始化方法和銷毀方法(如果定義了的話)。
  4. 懶加載:BeanFactory 支持懶加載(Lazy Initialization),即只有在需要訪問 bean 時才會進行實例化。這樣可以提高應用程序的性能,避免不必要的對象創建和資源占用。

BeanFactory 是 Spring 容器的核心接口,它有許多具體的實現,如 XMLBeanFactory、ApplicationContext 等。我們可以根據具體的需求選擇適合的實現類來管理和獲取 bean 實例。通過 BeanFactory,我們可以實現松耦合、可擴展和易于維護的應用程序架構。

MessageSource 是 Spring 框架中的一個接口,用于支持國際化和本地化的消息資源管理。

在應用程序中,我們通常需要顯示用戶界面上的文本消息,如錯誤消息、警告消息或其他用戶提示信息。使用 MessageSource 接口可以幫助我們管理這些文本消息,使其能夠根據不同的語言和地區進行動態的翻譯和顯示。

1.2 ApplicationContext

在這里插入圖片描述

從類圖上來看ApplicationContext繼承除BeanFactory的兩個子接口還繼承了其余四個接口來擴展功能

MessageSource, ApplicationEventPublisher, ResourcePatternResolver,EnvironmentCapable

MessageSource 提供了以下主要功能:

  1. 獲取消息:通過調用 getMessage() 方法,我們可以根據給定的消息代碼和可選的參數從消息源中獲取相應的文本消息。這個方法基于當前的語言環境(Locale)自動選擇適當的消息。
  2. 多語言支持:MessageSource 支持多語言的消息資源管理。我們可以為每個支持的語言和地區提供對應的消息資源文件,其中包含了相同的消息代碼但是具有不同的翻譯內容。根據當前的語言環境,MessageSource 可以自動選擇正確的消息資源文件來獲取對應的翻譯文本。
  3. 占位符和參數化消息:MessageSource 支持在消息文本中使用占位符和參數化的消息。我們可以在消息文本中使用占位符,然后通過傳遞參數來實現動態替換。這樣可以更靈活地構建消息,適應不同的上下文和需求。

通過使用 MessageSource,我們可以實現應用程序的國際化,使其能夠適應不同語言和地區的用戶。它提供了一種方便和可擴展的方式來管理和顯示多語言的文本消息。

ApplicationEventPublisher是Spring框架中的一個接口,用于在應用程序中發布事件,并通知所有已注冊的事件監聽器。

主要功能:

它的主要作用是實現應用程序中不同組件之間的解耦。當某個組件或模塊執行某個重要操作時,它可以使用ApplicationEventPublisher來發布相關事件,而不需要直接調用其他組件或模塊的方法。這樣,該組件與其他組件的關系變得松散,提高了代碼的可維護性和可擴展性。

簡單地從理解層面來說:

ApplicationEventPublisher用于發布事件消息給對該事件感興趣的監聽者。

具體來說,當某個事件發生時,比如訂單下單事件,在相應的代碼邏輯執行完成后,使用ApplicationEventPublisher可以將該事件發布出去。發布事件的動作將會觸發所有對該事件感興趣的監聽器進行相應的處理。

監聽器負責訂閱(注冊)所關心的事件,并在事件發生時執行特定的邏輯。通過監聽器的注冊和事件的發布,實現了模塊或組件之間的解耦。發布者只需要關心事件的發布,而具體的處理邏輯則由監聽器來實現。

簡而言之,ApplicationEventPublisher是用來發布事件消息的,它負責將事件通知傳遞給對該事件感興趣的監聽者。這樣,監聽者就可以根據自己的需求來訂閱并處理相應事件,實現系統的解耦和靈活性。

ResourcePatternResolver是Spring框架中的接口,用于解析資源路徑模式并獲取匹配的資源。

ResourcePatternResolver的主要作用是根據指定的資源路徑模式,獲取匹配的資源。資源可以是文件、類路徑下的資源或者其他可訪問的資源。它擴展了ResourceLoader接口,提供了更靈活的資源加載和解析功能。

通過ResourcePatternResolver,可以使用通配符和模式匹配的方式獲取一組符合條件的資源。這在很多場景下非常有用,例如:

  1. 批量加載資源:當需要加載多個資源時,可以使用資源路徑模式來批量獲取符合條件的資源,而不需要逐個指定資源路徑。
  2. 動態加載資源:資源路徑模式可以在運行時動態地構建,以滿足特定需求。這樣可以使系統更具靈活性和可擴展性。
  3. 配置文件加載:通過配置文件指定資源路徑模式,可以方便地加載配置文件所在的目錄下的所有符合條件的資源。

舉個例子,假設我們有一個Spring項目,需要加載所有類路徑下以.xml為后綴的配置文件。使用ResourcePatternResolver,我們可以定義一個資源路徑模式類似于classpath*:**/*.xml,然后調用相應方法來獲取所有匹配的配置文件資源。

總之,ResourcePatternResolver提供了一種便捷的方式來根據資源路徑模式獲取匹配的資源,使得資源加載更加靈活和可配置。使用它可以簡化代碼,提高系統的可擴展性和可維護性。

EnvironmentCapable是Spring框架中的一個接口,用于表示實現該接口的對象具有獲取運行環境(Environment)的能力。

通過實現EnvironmentCapable接口,可以讓對象獲取當前應用程序的運行環境。運行環境包括了一些與應用程序相關的配置和屬性信息,比如操作系統信息、系統屬性、環境變量等。

EnvironmentCapable接口主要定義了一個方法:

Environment getEnvironment();

該方法返回一個Environment對象,通過該對象可以獲取當前運行環境的各種屬性和配置值。

EnvironmentCapable的作用是使對象能夠根據運行環境的不同來適應性地執行邏輯。例如,根據當前環境的配置信息,可以進行相應的初始化、配置加載或其他操作。

在Spring框架中,很多核心組件都實現了EnvironmentCapable接口,以便根據不同的運行環境進行適配和處理。比如ApplicationContext就是EnvironmentCapable的子接口之一,它可以獲取運行環境并進行相應的Bean加載和管理。

件都實現了EnvironmentCapable接口,以便根據不同的運行環境進行適配和處理。比如ApplicationContext就是EnvironmentCapable的子接口之一,它可以獲取運行環境并進行相應的Bean加載和管理。

總結起來,EnvironmentCapable接口提供了獲取運行環境的能力,可以讓對象根據不同的環境進行適應性的操作。它在Spring框架中被廣泛使用,以便實現靈活的配置和適配。

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

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

相關文章

設備管理是什么意思?

設備管理 使組織能夠管理和維護設備&#xff0c;包括虛擬機、物理計算機、移動設備和 IoT 設備。 設備管理是任何組織安全策略的關鍵組成部分。 它有助于確保設備安全、最新且符合組織策略&#xff0c;目的是保護公司網絡和數據免受未經授權的訪問。 由于組織支持遠程和混合員…

MySQL 奇遇記三則

公司新項目&#xff0c;要使用 MySQL 數據庫。 第一次使用 MySQL&#xff0c;有點小激動。聽說過 N 多次&#xff0c;這一次終于用上了。 為什么是奇遇記&#xff1f; 因為在網上幾乎搜索不到別人遇到和我一樣的問題。 系統 &#xff1a;WINDOWS10X64 中文版 數據庫&#xf…

【數學建模】-- 數學規劃模型

概述&#xff1a; 什么是數學規劃&#xff1f; 數學建模中的數學規劃是指利用數學方法和技巧對問題進行數學建模&#xff0c;并通過數學規劃模型求解最優解的過程。數學規劃是一種數學優化方法&#xff0c;旨在找到使目標函數達到最大值或最小值的變量取值&#xff0c;同時滿足…

VGG簡單學習

VGG簡單學習 簡單介紹 在AlexNet網絡的基礎上&#xff0c;為了設計深層神經網絡&#xff0c;牛津大學設計了VGG網絡,采用塊的設計理念&#xff0c;將AlexNet中多個重復的卷積層和池化層組成一個塊 論文中&#xff0c;使用3x3卷積核&#xff0c;padding1的卷積層 和帶有2x2的匯…

1046:判斷一個數能否同時被3和5整除

【題目描述】 判斷一個數n 能否同時被3和5整除&#xff0c;如果能同時被3和5整除輸出YES&#xff0c;否則輸出NO。 【輸入】 輸入一行&#xff0c;包含一個整數n。&#xff08; -1,000,000 < n < 1,000,000&#xff09; 【輸出】 輸出一行&#xff0c;如果能同時被3…

WebMagic - 創意前端項目集合(點擊鏈接可在電腦上查看效果)

WebMagic - 創意前端項目集合 歡迎來到 WebMagic 倉庫&#xff01;這里匯集了一系列令人驚嘆的前端項目&#xff0c;涵蓋了HTML5、CSS3和JS等多項技術。無論你是前端開發者、設計師&#xff0c;還是對創意互動內容感興趣的人&#xff0c;這個倉庫都將為你帶來無盡的驚喜。 每…

Java Vue 前后端 關于時間格式數據的處理方法

前端使用 elment-ui 組件 el-date-picker 其中組件需要格式化時間&#xff0c;增加屬性 value-format"yyyy-MM-dd" 后端 Java 接收參數類型 后端Dto 使用Date接收&#xff0c;并添加JsonFormat注解 JsonFormat(pattern"yyyy-MM-dd") private Date testTi…

Python比較兩個Cookie之間的差異

python如何比較兩個cookie字符串之間的差異 pip安裝&#xff1a; pip install datedays 代碼&#xff1a; cookie1 JSESSIONID123456789; key1jiuliang; key22023; key31538; cookie2 JSESSIONID123456789; key1jiuliang; key40818; print(datedays.cookie_difference(…

LangChain手記 Chains

整理并翻譯自DeepLearning.AILangChain的官方課程&#xff1a;Chains&#xff08;源代碼可見&#xff09; Chains 直譯鏈&#xff0c;表達的意思更像是對話鏈&#xff0c;對話鏈的背后是思維鏈 LLM Chain&#xff08;LLM鏈&#xff09; 首先介紹了一個最簡單的例子&#xff0c…

代碼審計-java項目-組件漏洞審計

代碼審計必備知識點&#xff1a; 1、代碼審計開始前準備&#xff1a; 環境搭建使用&#xff0c;工具插件安裝使用&#xff0c;掌握各種漏洞原理及利用,代碼開發類知識點。 2、代碼審計前信息收集&#xff1a; 審計目標的程序名&#xff0c;版本&#xff0c;當前環境(系統,中間件…

圖數據庫_Neo4j和SpringBoot整合使用_實戰創建明星關系圖譜---Neo4j圖數據庫工作筆記0010

然后我們再來看一下這個明星關系圖譜 可以看到這里 這個是原來的startRelation 我們可以寫CQL去查詢對應的關系 可以看到,首先查詢出來以后,然后就可以去創建 我們可以把寫的創建明星關系的CQL,拿到 springboot中去執行 可以看到,這里我們先寫一個StarRelationRepository,然…

Java二分法查找

二分法&#xff1a;首先需要一個由小到大排序好的數組&#xff0c;先找到其中間值&#xff0c;然后進行比較如果比較中間值大的話則向前找。如果比要找的小&#xff0c;則向后找。 代碼實現&#xff1a; //定義查詢方法 public static int searchTarget(int[] nums, int targ…

wireshark界面內容含義

網絡分析工具——WireShark的使用&#xff08;超詳細&#xff09;_世間繁華夢一出的博客-CSDN博客 wireshark抓包數據&#xff1a;理解與分析_wireshark里面length_ 佚名的博客-CSDN博客

【圖書推薦 | 測試】—《測試設計思想》

前言 隨著科技的不斷發展&#xff0c;互聯網的不斷進步&#xff0c;日益出現了一種趨勢&#xff1a;測試設計將成為一種跨領域的綜合性工作&#xff0c;測試者將成為一種跨領域的通用型人才。由此清華大學出版社推出了一本名為《測試設計思想》的書籍&#xff0c;由知名專家周…

PHP-FPM進程排查

1、查看php-fpm的進程個數 ps -ef |grep "php-fpm"|grep "pool"|wc -l2、查看每個php-fpm占用的內存大小 ps -ylC php-fpm --sort:rss3.查看PHP-FPM在你的機器上的平均內存占用 ps --no-headers -o "rss,cmd" -C php-fpm | awk { sum$1 } END…

防止 JavaScript 中的正則表達式回溯

防止 JavaScript 中的正則表達式回溯 正則表達式是用于在軟件應用程序中操作和驗證文本的強大工具。然而&#xff0c;某些正則表達式模式可能容易受到回溯的影響&#xff0c;這可能會導致超線性運行時&#xff0c;并可能導致DoS攻擊。在本文中&#xff0c;我們將探討什么是回溯…

ios swift5 collectionView 瀑布流(兩列)

文章目錄 1.瀑布流1.1 demo地址1.2 記得把部署的最低版本由8改成11,13甚至更高。不然編譯會報錯 2.動態計算圖片和文字的高度 1.瀑布流 1.1 demo地址 CollectionViewWaterfallLayout - github 1.2 記得把部署的最低版本由8改成11,13甚至更高。不然編譯會報錯 2.動態計算圖片和…

產業園區數字孿生3d可視化全景展示方案

隨著數字經濟的發展&#xff0c;數字技術給企業發展帶來了機遇的同時&#xff0c;也為企業管理帶來挑戰。比如園區運維&#xff0c;不僅體量大&#xff0c;復雜的運維管理系統&#xff0c;落地難度也較高。那么如何通過數字化手段重塑園區運營&#xff0c;打通園區各業務數據孤…

SQLyog中導入CSV文件入庫到MySQL中

1.在數據庫中新建一個表&#xff0c;設置列名&#xff08;與待導入文件一致&#xff09;&#xff0c;字段可以多出幾個都可以 2.右鍵表名&#xff0c;導入- - >導入使用本地加載的CSV數據 選擇使用加載本地CVS數據 3.指定好轉義字符&#xff0c;將終止設置為,號(英文狀態下…

idea常見錯誤大全之:解決全局搜索失效+搜索條件失效(條件為空)+F8失靈

問題一&#xff1a;全局搜索快捷鍵ctrlshiftf 突然失靈了&#xff0c;鍵盤敲爛了 都沒反應&#xff0c;這是為什么呢&#xff1f; 肯定不是idea本身的原因&#xff0c;那么就是其它外在因素影響到了idea的快捷鍵&#xff0c;那么其它的快捷鍵為什么沒失效呢&#xff0c;原因只有…