最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

BeanFactory與ApplicationContext之間的關(guān)系

2023-08-14 19:34 作者:墨雪晨澗  | 我要投稿

1.BeanFactory與ApplicationContext之間的關(guān)系


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

BeanFactory它是ApplicationContext 的父接口

(2)從功能上來看:

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

1.1什么是BeanFactory?

表面上我們用到了getbean方法

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

補充:

這個實現(xiàn)類是誰==》DefaultListableBeanFactory

關(guān)于DefaultListableBeanFactory

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

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

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


標(biāo)準(zhǔn)一點回答:

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

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

BeanFactory 主要提供以下功能:

  1. Bean 實例化:BeanFactory 負責(zé)根據(jù)配置信息或注解來實例化 bean 對象。它會根據(jù) bean 的定義和配置信息,使用適當(dāng)?shù)膶嵗呗裕ㄈ鐦?gòu)造函數(shù)實例化、工廠方法實例化等)創(chuàng)建 bean 的實例。

  2. 依賴注入:BeanFactory 負責(zé)管理 bean 之間的依賴關(guān)系。通過配置文件或注解,我們可以聲明 bean 之間的依賴關(guān)系,BeanFactory 在創(chuàng)建 bean 實例時自動處理這些依賴,將依賴的對象注入到需要的位置。

  3. 生命周期管理:BeanFactory 管理 bean 的生命周期。它負責(zé)調(diào)用 bean 的初始化方法和銷毀方法(如果定義了的話)。

  4. 懶加載:BeanFactory 支持懶加載(Lazy Initialization),即只有在需要訪問 bean 時才會進行實例化。這樣可以提高應(yīng)用程序的性能,避免不必要的對象創(chuàng)建和資源占用。

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

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

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

1.2 ApplicationContext


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

MessageSource, ApplicationEventPublisher, ResourcePatternResolver,EnvironmentCapable

MessageSource 提供了以下主要功能:

  1. 獲取消息:通過調(diào)用 getMessage() 方法,我們可以根據(jù)給定的消息代碼和可選的參數(shù)從消息源中獲取相應(yīng)的文本消息。這個方法基于當(dāng)前的語言環(huán)境(Locale)自動選擇適當(dāng)?shù)南ⅰ?/p>

  2. 多語言支持:MessageSource 支持多語言的消息資源管理。我們可以為每個支持的語言和地區(qū)提供對應(yīng)的消息資源文件,其中包含了相同的消息代碼但是具有不同的翻譯內(nèi)容。根據(jù)當(dāng)前的語言環(huán)境,MessageSource 可以自動選擇正確的消息資源文件來獲取對應(yīng)的翻譯文本。

  3. 占位符和參數(shù)化消息:MessageSource 支持在消息文本中使用占位符和參數(shù)化的消息。我們可以在消息文本中使用占位符,然后通過傳遞參數(shù)來實現(xiàn)動態(tài)替換。這樣可以更靈活地構(gòu)建消息,適應(yīng)不同的上下文和需求。

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

ApplicationEventPublisher是Spring框架中的一個接口,用于在應(yīng)用程序中發(fā)布事件,并通知所有已注冊的事件監(jiān)聽器。

主要功能:

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

簡單地從理解層面來說:

ApplicationEventPublisher用于發(fā)布事件消息給對該事件感興趣的監(jiān)聽者。

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

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

簡而言之,ApplicationEventPublisher是用來發(fā)布事件消息的,它負責(zé)將事件通知傳遞給對該事件感興趣的監(jiān)聽者。這樣,監(jiān)聽者就可以根據(jù)自己的需求來訂閱并處理相應(yīng)事件,實現(xiàn)系統(tǒng)的解耦和靈活性。

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

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

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

  1. 批量加載資源:當(dāng)需要加載多個資源時,可以使用資源路徑模式來批量獲取符合條件的資源,而不需要逐個指定資源路徑。

  2. 動態(tài)加載資源:資源路徑模式可以在運行時動態(tài)地構(gòu)建,以滿足特定需求。這樣可以使系統(tǒng)更具靈活性和可擴展性。

  3. 配置文件加載:通過配置文件指定資源路徑模式,可以方便地加載配置文件所在的目錄下的所有符合條件的資源。

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

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

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

通過實現(xiàn)EnvironmentCapable接口,可以讓對象獲取當(dāng)前應(yīng)用程序的運行環(huán)境。運行環(huán)境包括了一些與應(yīng)用程序相關(guān)的配置和屬性信息,比如操作系統(tǒng)信息、系統(tǒng)屬性、環(huán)境變量等。

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

Environment getEnvironment();

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

EnvironmentCapable的作用是使對象能夠根據(jù)運行環(huán)境的不同來適應(yīng)性地執(zhí)行邏輯。例如,根據(jù)當(dāng)前環(huán)境的配置信息,可以進行相應(yīng)的初始化、配置加載或其他操作。

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

總結(jié)起來,EnvironmentCapable接口提供了獲取運行環(huán)境的能力,可以讓對象根據(jù)不同的環(huán)境進行適應(yīng)性的操作。它在Spring框架中被廣泛使用,以便實現(xiàn)靈活的配置和適配。


BeanFactory與ApplicationContext之間的關(guān)系的評論 (共 條)

分享到微博請遵守國家法律
通山县| 甘德县| 玛多县| 边坝县| 新竹市| 东方市| 崇礼县| 富川| 手游| 武川县| 涞源县| 枣阳市| 沾化县| 巴青县| 长武县| 咸丰县| 平湖市| 连州市| 南开区| 瓮安县| 宝清县| 思南县| 广东省| 龙江县| 南阳市| 雅江县| 承德县| 阿克苏市| 九龙坡区| 富锦市| 武安市| 阜宁县| 广宗县| 丹凤县| 威信县| 新竹县| 岑溪市| 惠东县| 宁国市| 清河县| 葵青区|