BeanFactory 和 ApplicationContext 的區別?

口語化答案

好的,面試官。BeanFactory和ApplicationContext都是用于管理Bean的容器接口

BeanFactory功能相對簡單。提供了Bean的創建、獲取和管理功能。默認采用延遲初始化,只有在第一次訪問Bean時才會創建該Bean。因為功能較為基礎,BeanFactory通常用于資源受限的環境中,比如移動設備或嵌入式設備。

ApplicationContext是BeanFactory的子接口,提供了更豐富的功能和更多的企業級特性。默認會在啟動時創建并初始化所有單例Bean,支持自動裝配Bean,可以根據配置自動注入依賴對象。有多種實現,如ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext等。

BeanFactory 就像基礎款手機,ApplicationContext 就像旗艦智能手機:

題目解析

經典題,早幾年愛考,現在隨著時間的發展,問的比較少,不排除古老面試官,應屆生可以重點看一下。

面試得分點

初始化時機,延遲,企業級應用場景

題目詳細答案

BeanFactory和ApplicationContext都是用于管理Bean的容器接口,它們的功能和用途有所不同。

BeanFactory

BeanFactory是Spring框架的核心接口之一,負責管理和配置應用程序中的Bean。它提供了基本的Bean容器功能,但功能相對簡單。BeanFactory提供了Bean的創建、獲取和管理功能。它是Spring IoC容器的最基本接口。

BeanFactory默認采用延遲初始化(lazy loading),即只有在第一次訪問Bean時才會創建該Bean。這有助于提升啟動性能。

因為功能較為基礎,BeanFactory通常用于資源受限的環境中,比如移動設備或嵌入式設備。

ApplicationContext

ApplicationContext是BeanFactory的子接口,提供了更豐富的功能和更多的企業級特性。

不僅提供了BeanFactory的所有功能,還提供了更多高級特性,如事件發布、國際化、AOP、自動Bean裝配等。

ApplicationContext默認會在啟動時創建并初始化所有單例Bean(除非顯式配置為延遲初始化)。這有助于在應用啟動時盡早發現配置問題。

ApplicationContext支持自動裝配Bean,可以根據配置自動注入依賴對象。

ApplicationContext有多種實現,如ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext等,適用于不同的配置方式和場景。

具體區別總結

BeanFactory

ApplicationContext

初始化時機

延遲初始化,只有在第一次訪問Bean時才創建該Bean。

立即初始化,在容器啟動時就創建并初始化所有單例Bean。

特性

功能較為基礎,只提供Bean的創建、獲取和管理功能。

提供更多企業級特性,如事件發布、國際化、AOP、自動裝配等。

使用場景

適用于資源受限的環境,或者需要延遲初始化的場景。

適用于大多數企業級應用

代碼 Demo

使用 BeanFactory
// 1. 加載配置文件
Resource resource = new ClassPathResource("old-school-beans.xml");
// 2. 創建基礎容器
BeanFactory factory = new XmlBeanFactory(resource);
// 3. 獲取Bean(此時才會真正創建)
OrderService service = factory.getBean(OrderService.class);
使用 ApplicationContext
// 1. 啟動即加載所有Bean(現代Spring Boot自動做的)
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 2. 直接獲取已初始化的Bean
OrderService service = context.getBean(OrderService.class);

為什么ApplicationContext更常用?

    • 提早暴露配置錯誤(啟動時就能發現bean創建問題)
    • 支持更多企業級功能(如事務管理、AOP等)
    • 符合"fail-fast"原則

什么情況下會用BeanFactory?

    • 開發資源極其有限的嵌入式系統
    • 需要精確控制內存使用的場景
    • 某些特殊測試場景需要延遲加載

現代開發怎么選?

    • 直接使用Spring Boot,它自動創建ApplicationContext
    • 除非有特殊需求,否則不用考慮BeanFactory

💡 實際開發中,99%的情況都在用ApplicationContext,BeanFactory現在更像是一個歷史概念。Spring Boot的SpringApplication.run()內部使用的就是AnnotationConfigApplicationContext。

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

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

相關文章

VNC連接VirtualBox中的Ubuntu24.04 desktop圖形化(GUI)界面

測試環境:VirtualBox 7,Ubuntu24.04 desktop,Ubuntu24.04 server(no desktop) 一、下載和安裝dRealVNC viewer。 二、配置 VirtualBox 網絡:NAT 模式 端口轉發 1、打開 VirtualBox,選擇您的 Ubuntu 虛擬機,點擊 設置。 選擇 網…

浮動路由和BFD配置

拓撲圖 前期的拓撲圖沒有交換機配置步驟 1、配置IP地址 終端IP地址的配置 路由器IP地址的配置 配置router的對應接口的IP地址 <Huawei>sys [Huawei]sysname router [router]interface Ethernet 0/0/0 [router-Ethernet0/0/0]ip address 192.168.10.254 24 [router-Ethern…

Docker 實戰 -- Nextcloud

文章目錄前言1. 創建 docker-compose.yml2. 啟動 Nextcloud3. 訪問 Nextcloud4. 配置優化&#xff08;可選&#xff09;使用 PostgreSQL使用 redis添加 Cron 后臺任務5. 常用命令6. 反向代理&#xff08;Nginx/Apache&#xff09;前言 當你迷茫的時候&#xff0c;請點擊 Docke…

【計算機網絡 | 第2篇】計算機網絡概述(下)

文章目錄七.因特網服務提供商&#x1f95d;八.接入網&#x1f95d;主流的家庭寬帶接入方式介入網工作原理&#x1f9d0;DSL技術&#xff1a;銅線上的“三通道”通信DSL的速率標準呈現出顯著的"不對稱"特征&#x1f914;電纜互聯網接入技術&#x1f34b;?&#x1f7e…

SpringMVC 6+源碼分析(四)DispatcherServlet實例化流程 3--(HandlerAdapter初始化)

一、概述 HandlerAdapter 是 Spring MVC 框架中的一個核心組件&#xff0c;它在 DispatcherServlet 和處理程序&#xff08;handler&#xff09;之間扮演適配器的角色。DispatcherServlet 接收到 HTTP 請求后&#xff0c;需要調用對應的 handler 來處理請求&#xff08;如控制器…

【lucene】FastVectorHighlighter案例

下面給出一套可直接拷貝運行的 Lucene 8.5.0 FastVectorHighlighter 完整示例&#xff08;JDK 8&#xff09;&#xff0c;演示從建索引、查詢到高亮的全過程。 > 關鍵點&#xff1a;字段必須 1. 存儲原始內容&#xff08;setStored(true)&#xff09; 2. 開啟 TermVecto…

C++返回值優化(RVO):高效返回對象的藝術

在C開發中&#xff0c;按值返回對象的場景十分常見&#xff08;如運算符重載、工廠函數等&#xff09;&#xff0c;但開發者常因擔憂“構造/析構的性能開銷”而陷入糾結&#xff1a;該不該返回對象&#xff1f;如何避免額外成本&#xff1f;本文將剖析痛點、拆解錯誤思路&#…

用 PyTorch 實現一個簡單的神經網絡:從數據到預測

PyTorch 是目前最流行的深度學習框架之一&#xff0c;以其靈活性和易用性受到開發者的喜愛。本文將帶你從零開始&#xff0c;用 PyTorch 實現一個簡單的神經網絡&#xff0c;用于解決經典的 MNIST 手寫數字分類問題。我們將涵蓋數據準備、模型構建、訓練和預測的完整流程&#…

四級頁表通俗講解與實踐(以 64 位 ARM Cortex-A 為例)

&#x1f4d6; &#x1f3a5; B 站博文精講視頻&#xff1a;點擊鏈接&#xff0c;配合視頻深度學習 四級頁表通俗講解與實踐&#xff08;以 64 位 ARM Cortex-A 為例&#xff09; 本文面向希望徹底理解現代 64 位架構下四級頁表的開發者&#xff0c;結合 ARM Cortex-A 系列處理…

AI模型整合包上線!一鍵部署ComfyUI,2.19TB模型全解析

最近體驗了AIStarter平臺上線的AI模型整合包&#xff0c;包含2.19TB ComfyUI大模型&#xff0c;整合市面主流模型&#xff0c;一鍵部署ComfyUI&#xff0c;省去重復下載煩惱&#xff01;以下是使用心得和部署步驟&#xff0c;適合AI開發者參考。工具亮點這款AI模型整合包由熊哥…

灰色優選模型及算法MATLAB代碼

電子裝備試驗方案優選是一個典型的多屬性決策問題&#xff0c;通常涉及指標復雜、信息不完整、數據量少且存在不確定性的特點。灰色系統理論&#xff08;Grey System Theory&#xff09;特別擅長處理“小樣本、貧信息”的不確定性問題&#xff0c;因此非常適合用于此類方案的優…

AI框架工具FastRTC快速上手6——視頻流案例之物體檢測(下)

一 前言 上一篇,我們實現了用YOLO對圖片上的物體進行檢測,并在圖片上框出具體的對象并打出標簽。但只是應用在單張圖片,且還沒用上FastRTC。 本篇,我們希望結合FastRTC的能力,實現基于YOLO的實時視頻流的物體檢測。 本篇文字將不會太多。學習完本篇,對比前面的文章,你…

PHP常見中高面試題匯總

一、 PHP部分 1、PHP如何實現靜態化 PHP的靜態化分為&#xff1a;純靜態和偽靜態。其中純靜態又分為&#xff1a;局部純靜態和全部純靜態。 PHP偽靜態&#xff1a;利用Apache mod_rewrite實現URL重寫的方法&#xff1b; PHP純靜態&#xff0c;就是生成HTML文件的方式&#xff0…

基于Java AI(人工智能)生成末日題材的實踐

Java AI 生成《全球末日》文章的實例 使用Java結合AI技術生成《全球末日》題材的文章可以通過多種方式實現,包括調用預訓練模型、使用自然語言處理庫或結合生成式AI框架。以下是30個實例的生成方法和示例代碼片段。 調用預訓練模型(如GPT-3或GPT-4) 使用OpenAI API生成末日…

針對軟件定義車載網絡的動態服務導向機制

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

Pytorch實現嬰兒哭聲檢測和識別

Pytorch實現嬰兒哭聲檢測和識別 目錄 Pytorch實現嬰兒哭聲檢測識別 1. 項目說明 2. 數據說明 &#xff08;1&#xff09;嬰兒哭聲語音數據集 &#xff08;2&#xff09;自定義數據集 3. 模型訓練 &#xff08;1&#xff09;項目安裝 &#xff08;2&#xff09;準備Tra…

海信IP810N/海信IP811N_海思MV320-安卓9.0主板-TTL燒錄包-可救磚

海信IP810N&#xff0f;海信IP811N_海思MV320處理器-安卓9主板-TTL燒錄包-可救磚準備工作&#xff1a;TTL線自備跑碼工具【putty跑碼中文版】路徑&#xff1a;【工具大全】-【putty跑碼中文版】測試跑碼以后將跑碼窗口關閉&#xff1b;然后到下方下載燒錄工具并大致看下教程燒錄…

Go 中的 interface{} 與 Java 中的 Object:相似之處與本質差異

在軟件系統開發中&#xff0c;“通用類型”的處理是各語言設計中不可忽視的一部分。Java 使用 Object&#xff0c;Go 使用 interface{}&#xff0c;它們都可以容納任意類型的值&#xff0c;是實現動態行為或通用容器的基礎類型。然而&#xff0c;雖然兩者在使用層面看似相似&am…

Docker-07.Docker基礎-數據卷掛載

一.案例首先我們通過一則案例來引出問題。我們要修改nginx容器內的html目錄下的index.html文件&#xff0c;并且要將靜態資源部署到nginx的html目錄&#xff0c;就要首先知道該html目錄的所在位置。我們首先查看nginx鏡像的幫助文檔&#xff0c;這里就是將有關靜態資源目錄的&a…

數據結構(三)雙向鏈表

一、什么是 make 工具&#xff1f;make 是一個自動化構建工具&#xff0c;主要用于管理 C/C 項目的編譯和鏈接過程。它通過讀取 Makefile 文件中定義的規則&#xff0c;自動判斷哪些文件被修改&#xff0c;并僅重新編譯這些部分&#xff0c;從而大幅提高構建效率。二、什么是 M…