Spring中 BeanFactory和FactoryBean分別是什么?

Spring 中 BeanFactory 是什么?

BeanFactory其實就是IoC的底層容器,它本身只是一個接口,顧名思義Bean工廠,定義了Spring的基本功能框架,主要功能就是

  • 負責從配置源中讀取 Bean 的定義,并創建、管理這些 Bean 的生命周期

  • 然后是延遲初始化,它只會在 Bean 首次請求時才會實例化該 Bean,而不是在容器啟動時就立即創建所有的Bean

Spring 中的 FactoryBean 是什么?

FactoryBean是 Spring 提供的一個特殊接口,允許開發者通過自定義的邏輯創建Bean 實例。它提供了更加靈活的初始化定制功能

FactoryBean 接口有幾個主要的方法

  • getObject(): 返回此工廠創建的對象的實例。該返回值會被存儲到IoC容器,解決循環依賴的第三級緩存就是工廠bean

  • isSingleton(): 判斷此 FactoryBean 是否返回單例

  • getObjectType(): 返回 getObject() 方法返回的對象類型

假設你依賴一個第三方的類HappyMachine,而我們又不能修改第三方的類,并且這個對象創建比較復雜,那么你就可以創建一個 bean 來封裝它:

// 實現FactoryBean接口時需要指定泛型
// 泛型類型就是當前工廠要生產的對象的類型
public class HappyFactoryBean implements FactoryBean<HappyMachine> {private String machineName;public String getMachineName() { ? ? ? ? ?//get setreturn machineName;}public void setMachineName(String machineName) {this.machineName = machineName;}@Overridepublic HappyMachine getObject() throws Exception { ? ?//實例工廠bean,獲取bean// 方法內部模擬創建、設置一個對象的復雜過程HappyMachine happyMachine = new HappyMachine();happyMachine.setMachineName(this.machineName);return happyMachine; ? //返回對象}@Overridepublic Class<?> getObjectType() {// 返回要生產的對象的類型return HappyMachine.class;}
}

這樣,我們getBean("A”)會得到 A FactoryBean#getObject 的結果,如果單純只想要 A的FactoryBean那么加個“&”即可,即 getBean("&A")

ApplicationContext ioc = new ClassPathXmlApplicationContext("...."); ? ?
HappyMachine happyMachine = ioc.getBean("happyMachine"); ? ?     //返回的是getObject方法返回的對象          ? ? ? ? 
// &happyMachine7 這是一種固定的約束 ? ?? ?
Object bean = iocContainer.getBean("&happyMachine"); ? ?//如果想要獲取FactoryBean對象, 直接在id前添加&符號即可! 

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

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

相關文章

langchain從入門到精通(三十二)——RAG優化策略(八)自查詢檢索器實現動態數據過濾

1. 查詢構建與自查詢檢索器 在 RAG 應用開發中&#xff0c;檢索外部數據時&#xff0c;前面的優化案例中&#xff0c;無論是生成的 子查詢、問題分解、生成假設性文檔&#xff0c;最后在執行檢索的時候使用的都是固定的篩選條件&#xff08;沒有附加過濾的相似性搜索&#xff…

面向安全產品測試的靜態混淆型 Shellcode Loader 設計與對抗分析

github 地址&#xff1a;https://github.com/LilDean17/ShellcodeLoader2025 一、項目背景 近年來&#xff0c;隨著 C2 框架廣泛應用于安全對抗模擬&#xff0c;各大安全廠商也不斷提升其檢測能力&#xff0c;那么安全廠商自研的安全軟件&#xff0c;是否能有效防御此類威脅&…

深度強化學習DRL——策略學習

一、策略網絡 策略函數 π \pi π的輸入是狀態 s s s和動作 a a a&#xff0c;輸出是一個介于0和1之間的概率值&#xff0c;用神經網絡 π ( a ∣ s ; θ ) \pi(a \mid s; \boldsymbol{\theta}) π(a∣s;θ)近似策略函數 π ( a ∣ s ) \pi(a\mid s) π(a∣s)&#xff0c; θ …

ISP Pipeline(5): Auto White Balance Gain Control (AWB) 自動白平衡

G_gain 1.0 # 常作為參考通道 R_gain G_avg / R_avg B_gain G_avg / B_avgAuto White Balance Gain Control&#xff08;AWB&#xff09;自動調整圖像中紅色、綠色、藍色通道的增益&#xff0c;使圖像中灰白區域的顏色看起來為“中性白”或“灰白”&#xff0c;從而矯正因光…

Python中鉤子函數的實現方式

在Python中&#xff0c;鉤子函數(Hook)是一種允許你在程序執行的特定點插入自定義代碼的技術。它本質上是一種回調機制&#xff0c;當特定事件發生時自動調用預先注冊的函數。 Python中鉤子函數的實現方式 Python中實現鉤子主要有以下幾種方式&#xff1a; ?回調函數?&…

【RTSP從零實踐】3、實現最簡單的傳輸H264的RTSP服務器

&#x1f601;博客主頁&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客內容&#x1f911;&#xff1a;&#x1f36d;嵌入式開發、Linux、C語言、C、數據結構、音視頻&#x1f36d; &#x1f923;本文內容&#x1f923;&a…

零開始git使用教程-傳html文件

1. 準備工作 (1) 確保你已經安裝&#xff1a; Visual Studio (VS)&#xff08;任何版本&#xff0c;社區版也行&#xff09; Git&#xff08;去官網 git-scm.com 下載安裝&#xff09; (2) 注冊 Gitee/GitHub 賬號 國內推薦 Gitee&#xff08;碼云&#xff09;&#xff1a;…

CPT204-Advanced OO Programming: Lists, Stacks, Queues, and Priority Queues

目錄 1.Java 集合框架層次結構Java Collection Framework hierarchy 1.1Java 集合框架描述&#xff1a; 1.2數據結構Data structures 1.3 Java 集合框架支持兩種類型的容器&#xff08;數據結構&#xff09;&#xff1a; 1.4 Java 集合框架的設計 2.Collection 2.1 Coll…

【網絡安全】Mysql注入中鎖機制

前言 在sql注入的延時注入中&#xff0c;常見的函數有sleep()直接延時、BENCHMARK()通過讓數據庫進行大量的計算而達到延時的效果、笛卡爾積、正則匹配等&#xff0c;但還有一個常常被忽略的函數&#xff0c;也就是Mysql中的鎖機制。雖然早些年就已經出現過相關的技術文章&…

博途多重背景、參數實例

1&#xff1a;我們在博途中先新建一個工程&#xff0c;并且建立一個FB塊名字為motor_fb&#xff0c;同樣建立一個FC塊名字為MOTOR_FC&#xff0c;里面寫上我們電機程序里常用的邏輯控制。二者程序內容相同。下面是motor_fb塊的程序截圖: 2:我們再新建一個FB塊&#xff0c;名字為…

運維的利器–監控–zabbix–第三步:配置zabbix–中間件–Tomcat–步驟+驗證

&#x1f3e0;個人主頁&#xff1a;fo安方的博客? &#x1f482;個人簡歷&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;目前中南大學MBA在讀&#xff0c;也考取過HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等證書。&#x1f433; &…

大模型在重癥哮喘手術全流程風險預測與治療方案制定中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目標與方法 1.3 研究創新點 二、重癥哮喘概述 2.1 定義與發病機制 2.2 分類與臨床表現 2.3 診斷標準與方法 三、大模型技術原理與應用現狀 3.1 大模型的基本原理 3.2 在醫療領域的應用案例分析 3.3 適用于重癥哮喘預測的…

Webpack的插件機制Tapable

Tapable 是一個輕量級的庫&#xff0c;用于創建和管理插件鉤子&#xff08;hooks&#xff09;&#xff0c;它在 Webpack 中廣泛應用&#xff0c;用于實現插件系統。Tapable 提供了一種機制&#xff0c;允許插件在特定的生命周期階段插入自定義邏輯&#xff0c;從而擴展應用程序…

FRONT歸因-兩階段訓練流程

FRONT, Fine-Grained Grounded Citations歸因 FRONT歸因&#xff0c;首先從檢索到的源文檔中選擇支持性引用&#xff0c;然后基于這些引用指導生成過程&#xff0c;確保生成回答有據可依&#xff0c;引用準確無誤。 FRONT的特色在于兩階段歸因訓練&#xff0c;要點如下: 階…

單端轉差分放大器AD8138

根據 AD8138 的數據手冊特性及參數&#xff0c;可以實現單端 5Vpp&#xff08;偏置 0V&#xff09;正弦波轉差分 5Vpp&#xff08;共模 2.5V&#xff09;的功能&#xff0c;但需注意以下細節&#xff1a; 1. 信號幅度匹配性 輸入信號&#xff1a;單端 5Vpp&#xff08;峰峰值…

用R包mice進行多重插補

利用R包mice實現的鏈式方程多重插補方法來插補缺失的數據。 所有多重插補方法都遵循三個步驟 插補——與單次插補類似&#xff0c;對缺失值進行插補。但是&#xff0c;插補值會從分布中提取m次&#xff0c;而不是僅提取一次。此步驟結束時&#xff0c;應該有m 個完整的數據集…

【專題】網絡攻防技術期末復習資料

網絡攻防技術期末復習資料 鏈接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148996272?sharetypeblogdetail&sharerId148996272&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 網絡安全威脅的成因。 分類&#xff1a…

地震災害的模擬

為確保地震災害模擬的準確性和高效性&#xff0c;涉及的系統需要處理復雜的物理模型、數據輸入和多層次的模擬過程。在技術設計方案中&#xff0c;我們將涵蓋以下幾個方面&#xff1a; 背景&#xff1a;描述該模擬系統的目的與應用場景。需求&#xff1a;列出系統的功能需求&a…

9.9 《1/10成本實現GPT-3.5級表現!ChatGLM3-6B QLoRA微調實戰:4bit量化+低秩適配全解析》

1/10成本實現GPT-3.5級表現!ChatGLM3-6B QLoRA微調實戰:4bit量化+低秩適配全解析 ChatGLM3-6B 微調入門實戰:QLoRA 量化低秩適配技術 ▲ ChatGLM3-6B采用GLM架構改進版,支持32K上下文長度和代碼生成能力 一、QLoRA 技術原理精要 QLoRA(Quantized Low-Rank Adaptation)…

【Python基礎】11 Python深度學習生態系統全景解析:從基礎框架到專業應用的技術深度剖析(超長版,附多個代碼及結果)

引言:Python在深度學習領域的統治地位 在人工智能浪潮席卷全球的今天,Python已經成為深度學習領域當之無愧的王者語言。這不僅僅是因為Python語法簡潔易學,更重要的是圍繞Python構建的深度學習生態系統的完整性和強大性。從Google的TensorFlow到Facebook的PyTorch,從科學計…