ObjectFactory學習

簡介

在Spring框架中,ObjectFactory是一個功能接口,它定義了一個簡單的方法來獲取對象的實例。ObjectFactory接口通常用于工廠模式和依賴注入中,允許延遲對象創建和配置,以及在運行時動態地決定要返回的對象實例。

源碼

@FunctionalInterface
public interface ObjectFactory<T> {/*** 這個接口類似于FactoryBean,但是FactoryBean的實現通常被定義為BeanFactory中的SPI實例,而ObjectFactory的實現通常被定義為作為API(通過注入)提供給其他bean。接口只有一個方法 getObject(),方法沒有參數,像是一個函數式接口;接口定義是一個對象工廠,對象的創建方式完全由調用方或者子類實現。*/T getObject() throws BeansException;/**其實匿名對象也是子類實現一種.
實現類有RequestObjectFactory,ResponseObjectFactory等實現。他們都有個共同的特點,就是通過BeanFactory的registerResolvableDependency()注冊依賴的實例到beanFactory。但是只是聲明依賴關系,并沒有把實例的生命周期交由beanFactory進行管理.*/
void registerResolvableDependency(Class<?> dependencyType, Object autowiredValue);/**即聲明了Class類型依賴的實例是autowiredValue,autowired可以是真實實例,也可以ObjectFactory。這樣,BeanFactory遇到Class類型時就不用再自己創建實例,直接使用autowired注入就行。和普通bean實例的最大區別是beanFactory不維護autowired實例的生命周期,由beanFactory外部維護. 對于ServletRequest實例來說,如果使用tomcat,那么ServletRequest的生命周期就由tomcat維護。
像這種由spring容器外部維護的實例,但容器又想使用依賴注入實現注入,就可以用以上這種方式實現。*/
}

示例

import org.springframework.beans.factory.ObjectFactory;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  public class ObjectFactoryExample {  public static void main(String[] args) {  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  ObjectFactory<MyBean> myBeanObjectFactory = context.getBean("myBeanObjectFactory", ObjectFactory.class);  MyBean myBean = myBeanObjectFactory.getObject();  myBean.doSomething();  }  
}  class MyBean {  public void doSomething() {  System.out.println("Doing something in MyBean");  }  
}

在這個例子中,我們假設在applicationContext.xml配置文件中有一個名為myBeanObjectFactory的FactoryBean定義,它返回MyBean類型的ObjectFactory。然后,我們通過ApplicationContext獲取這個ObjectFactory,并使用它來創建MyBean的實例。

請注意,在實際的Spring應用中,直接使用ObjectFactory的情況并不多見,它更多地是作為內部機制的一部分,用于支持更復雜的Bean生命周期和依賴管理功能。

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

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

相關文章

Laravel Octane 和 Swoole 協程的使用分析二

又仔細研究了下 Octane 源碼和 Swoole 的文檔&#xff0c;關于前幾天 Laravel Octane 和 Swoole 協程的使用分析中的猜想&#xff0c;得到進一步驗證&#xff1a; Swoole 的 HTTP Server 啟動后會創建一個 master 進程和一個 manager 進程&#xff1b;master 進程又會創建多個…

智能咖啡廳助手:人形機器人 +融合大模型,行為驅動的智能咖啡廳機器人(機器人大模型與具身智能挑戰賽)

智能咖啡廳助手&#xff1a;人形機器人 融合大模型&#xff0c;行為驅動的智能咖啡廳機器人(機器人大模型與具身智能挑戰賽) “機器人大模型與具身智能挑戰賽”的參賽作品。的目標是結合前沿的大模型技術和具身智能技術&#xff0c;開發能在模擬的咖啡廳場景中承擔服務員角色并…

常用備注(記錄中...)

文章目錄 docker測試網絡可達性檢查端口是否開放PgSql docker docker logout IP地址:端口號 docker login IP地址:端口號橋接模式bridge啟動容器 docker run -d -p 外部端口號:內部端口號(配置文件中的端口號) --name 容器名稱 -v /data/docker/conf/application.yml:/app/con…

javaWebssh在線授課輔導系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh在線授課輔導系統是一套完善的web設計系統&#xff08;系統采用ssh框架進行設計開發&#xff09;&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用 B/S模式開發。開發環境為TOMCAT7.…

4.Java---方法+重載

方法 方法的調用是需要開辟內存的,方法調用結束內存就被銷毀了. 下面將介紹一個經典的錯誤標準的0分的示意! 我們日常中寫交換兩個數字的代碼的時候都會用如下的方法進行描述: 你是不是覺得自己寫的特別對!終于可以獨立寫一個小小的函數了? 下面運行一下看看結果 哦莫!怎么…

autoware.universe中所有的多傳感器融合代碼解讀,一看就懂!

目錄 融合的前提條件case1:vision_roi與cluster融合融合過程case2:vision_roi與centerPoint融合融合過程小結:case3:vision_roi與pointcloud融合融合過程總結融合的前提條件 計算視覺ROI話題的時刻T1(時間戳獲得) 計算激光雷達話題的時刻T2,并將T2加上設定的偏差時間間隔in…

C# DataTable 對象操作

實現DataTable按字段進行分類、按列數據匯總、序列化對象數組、所有字段轉小寫、動態對象數組、數據分頁 分類DataTableClassfiy實體&#xff1a; /// <summary>/// 單個分類表/// </summary>public class DataTableClassfiy{/// <summary>/// 分類名稱/// &…

springboot第61集:Jenkins-Boss萬字挑戰,一文讓你走出微服務迷霧架構周刊

名詞 CONTAINER ID&#xff08;容器ID&#xff09; 名詞 IMAGE ID&#xff08;鏡像ID&#xff09;cat /etc/os-release //查看系統信息 pwd //查看當前路徑 ls //查看當前目錄文件 docker -v //查看docker版本 docker-compose up -d //在后臺運行&#xff08;取消-d是在控制臺運…

linux系統Jenkins工具添加自由項目和maven項目

Jenkins添加自由項目 添加自由項目操作流程代碼遠程代碼郵件標題郵件正文 添加maven項目準備環境操作流程 添加自由項目 gitlab配置基本代碼頁面等&#xff0c;拉取代碼&#xff0c;打包&#xff0c;發布操作流程 代碼 遠程代碼 echo ssh root192.168.188.177 "tar cz…

EasyExcel 自適應列寬、隱藏列、動態列、單元格下拉框選擇數據、單元格文本格式

前言 項目中用到EasyExcel讀寫Excel&#xff0c;用到了一下功能&#xff0c;這里做個筆記&#xff1a; 列寬自適應&#xff1a;自適應寬度隱藏列&#xff1a;隱藏某些列動態列&#xff1a;固定列 動態的生成Excel列單元格下拉框選擇數據&#xff1a;設計單元格下拉數據&…

深搜,LeetCode 2368. 受限條件下可到達節點的數目

一、題目 1、題目描述 現有一棵由 n 個節點組成的無向樹&#xff0c;節點編號從 0 到 n - 1 &#xff0c;共有 n - 1 條邊。 給你一個二維整數數組 edges &#xff0c;長度為 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示樹中節點 ai 和 bi 之間存在一條邊。另給你一個整數…

WPF的DataGrid設置標題頭

要設置DataGrid標題頭的分割線、背景色和前景色等屬性&#xff0c;您可以使用DataGrid的樣式和模板來自定義標題頭的外觀。下面是詳細解釋以及示例代碼&#xff1a; 分割線設置&#xff1a; 您可以使用DataGrid.ColumnHeaderStyle樣式中的BorderThickness和BorderBrush屬性來設…

Java基礎-java開發入門

(創作不易&#xff0c;感謝有你&#xff0c;你的支持&#xff0c;就是我前行的最大動力&#xff0c;如果看完對你有幫助&#xff0c;請留下您的足跡&#xff09; 目錄 一、什么是Java 二、Java語言的特點 三、什么是JDK 四、第一個Java程序 一、什么是Java Java是由Sun …

electron nsis 安裝包 window下任務欄無法正常固定與取消固定

問題 win10系統下&#xff0c;程序任務欄在固定后取消固定&#xff0c;展示的程序內容異常。 排查 1.通過論壇查詢&#xff0c;應該是與app的api setAppUserModelId 相關 https://github.com/electron/electron/issues/3303 2.electron-builder腳本 electron-builder…

二月打戲最燃的國漫推薦,斗羅大陸2上榜,吞噬星空堪稱第一

2024年開年&#xff0c;國漫就給我們帶來了很大的驚喜&#xff0c;在剛剛過去的2月&#xff0c;有幾部中出現了超燃的打戲&#xff0c;看得人熱血沸騰。尤其是科幻番《吞噬星空》中的一場1V1對決&#xff0c;特效和設計都堪稱第一。還有哪些國漫上榜呢&#xff1f;下面就一起來…

TCP為什么要三次握手?

TCP三次握手協議是為了在不可靠的互聯網環境中可靠地建立起一個連接&#xff0c;三次握手可以確保兩端的發送和接收能力都是正常的。 那么&#xff0c;為什么是三次而不是二次或四次握手呢&#xff1f; 為什么不是二次握手&#xff1f; 如果是二次握手&#xff0c;即客戶端發…

網絡編程 io_uring

io_uring 1、概述 io_uring是Linux&#xff08;內核版本在5.1以后&#xff09;在2019年加入到內核中的一種新型的異步I/O模型&#xff1b; io_uring使用共享內存&#xff0c;解決高IOPS場景中的用戶態和內核態的切換過程&#xff0c;減少系統調用&#xff1b;用戶可以直接向…

vue + cesium初始化地圖 + 鼠標經過地圖(點、線等其他實體)樣式

vue cesium初始化地圖 鼠標經過地圖&#xff08;點、線等其他實體&#xff09;樣式 export function initMap(mapViewer) {Cesium.Ion.defaultAccessToken "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0OTUzOGJhMy1iNzVjLTQwZjItYWYyNy03YjA4MjM0YWE2MWMiLCJpZ…

Unity(第二十二部)官方的反向動力學一般使用商城的IK插件,這個用的不多

反向動力學&#xff08;Inverse Kinematic&#xff0c;簡稱IK&#xff09;是一種通過子節點帶動父節點運動的方法。 正向動力學 在骨骼動畫中&#xff0c;大多數動畫是通過將骨架中的關節角度旋轉到預定值來生成的&#xff0c;子關節的位置根據父關節的旋轉而改變&#xff0c;這…

編寫腳本一鍵安裝rsyslog

腳本分解 環境檢測部分 檢查操作系統 #!/bin/bash# 檢查是否為 Debian 類型 if [ -f /etc/debian_version ]; thenecho "當前操作系統是 Debian 類型"SYSLOG_SERVICE"rsyslog"INSTALL_COMMAND"apt-get install -y"CONFIG_FILE"/etc/rsys…