AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Spring的BeanFactory與FactoryBean的區別,你現在懂了嗎?

來源: 責編: 時間:2023-10-27 09:15:15 313觀看
導讀我們還是來剖析面試題,今天了不起來來帶大家看看這個需要看源碼的面試題,因為面試的時候,有很多情況不一定需要去看源碼就能回答的問題,但是也有很多的問題是需要我們去看源碼才能回答的問題,今天我們就來看看一個比較經典

我們還是來剖析面試題,今天了不起來來帶大家看看這個需要看源碼的面試題,因為面試的時候,有很多情況不一定需要去看源碼就能回答的問題,但是也有很多的問題是需要我們去看源碼才能回答的問題,今天我們就來看看一個比較經典的問題,也是關于Spring 的面試題。c5L28資訊網——每日最新資訊28at.com

BeanFactory

BeanFactory 是 Spring 容器的頂級接?,給具體的IOC容器的實現提供了規范。c5L28資訊網——每日最新資訊28at.com

BeanFactory 只是個接口,并不是IOC容器的具體實現.c5L28資訊網——每日最新資訊28at.com

而 Spring 的本質是一個 Bean 工廠( BeanFactory )或者說 Bean 容器,它按照我們的要求,生產我們需要的各種各樣的 Bean ,提供給我們使用。只是在生產 Bean 的過程中,需要解決 Bean 之間的依賴問題,才引入了依賴注入(DI)這種技術。也就是說依賴注入是 BeanFactory 生產 Bean 時為了解決 Bean 之間的依賴的一種技術而已。c5L28資訊網——每日最新資訊28at.com

BeanFactory 的實現

Spring 容器給出了很多種實現,如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext 等。而這些具體的容器都是實現了 BeanFactory ,再在其基礎之上附加了其他的功能。c5L28資訊網——每日最新資訊28at.com

DefaultListableBeanFactoryc5L28資訊網——每日最新資訊28at.com

BeanFactory 接口體系的默認實現類,實現以上接口的功能,提供 BeanDefinition 的存儲 map ,Bean 對象對象的存儲 map 。c5L28資訊網——每日最新資訊28at.com

其中 Bean 對象實例的存儲 map ,定義在 FactoryBeanRegistrySupport , FactoryBeanRegistrySupport 實現了 SingletonBeanRegistry 接口,而 DefaultListableBeanFactory 的基類 AbstractBeanFactory ,繼承于 FactoryBeanRegistrySupport。c5L28資訊網——每日最新資訊28at.com

StaticListableBeanFactoryc5L28資訊網——每日最新資訊28at.com

用于存儲給定的 bean 對象實例,不支持動態注冊功能,是 ListableBeanFactory 接口的簡單實現。c5L28資訊網——每日最新資訊28at.com

ApplicationContextc5L28資訊網——每日最新資訊28at.com

ApplicationContext 包含 BeanFactory 的所有功能,通常建議? BeanFactory 優先。c5L28資訊網——每日最新資訊28at.com

ApplicationContext 以?種更向?向框架的?式?作以及對上下?進?分層和實現繼承,ApplicationContext 包還提供了以下的功能:c5L28資訊網——每日最新資訊28at.com

  • MessageSource, 提供國際化的消息訪問。
  • 資源訪問,如URL和?件
  • 事件傳播
  • 載?多個(有繼承關系)上下? ,使得每?個上下?都專注于?個特定的層次,?如應?的web 層;

BeanFactory 提供的?法及其簡單,僅提供了六種?法供客戶調?:源碼如下c5L28資訊網——每日最新資訊28at.com

String FACTORY_BEAN_PREFIX = "&";    //判斷??中是否包含給定名稱的bean定義,若有則返回true    boolean containsBean(String beanName) //返回給定名稱注冊的bean實例。根據bean的配置情況,如果是singleton模式將返回?個共享實例,否則將返回?個新建的實例,如果沒有找到指定bean,該?法可能會拋出異常Object getBean(String) //返回以給定名稱注冊的bean實例,并轉換為給定class類型Class getType(String name) 返回給定名稱的bean的Class,如果沒有找到指定的bean實例,則排除NoSuchBeanDefinitionException異常Object getBean(String, Class) //判斷給定名稱的bean定義是否為單例模式boolean isSingleton(String) //返回給定bean名稱的所有別名String[] getAliases(String name)

而 FactoryBean 是干什么用的呢?c5L28資訊網——每日最新資訊28at.com

FactoryBean

?般情況下,Spring 通過反射機制利? <bean>  的 class 屬性指定實現類實例化 Bean,在某些情況下,實例化 Bean 過程?較復雜,如果按照傳統的?式,則需要在 <bean> 中提供?量的配置信息。配置?式的靈活性是受限的,這時采?編碼的?式可能會得到?個簡單的?案。c5L28資訊網——每日最新資訊28at.com

Spring 為此提供了?個 org.springframework.bean.factory.FactoryBean 的??類接?,?戶可以通過實現該接?定制實例化Bean的邏輯。FactoryBean 接?對于 Spring 框架來說占?重要的地位,Spring ?身就提供了70多個 FactoryBean 的實現。它們隱藏了實例化?些復雜 Bean 的細節,給上層應?帶來了便利。從 Spring3.0 開始,FactoryBean 開始?持泛型,即接?聲明改為 FactoryBean<T> 的形式c5L28資訊網——每日最新資訊28at.com

以 Bean 結尾,表示它是?個 Bean ,不同于普通 Bean 的是:它是實現了 FactoryBean<T> 接?的 Bean ,根據該 Bean 的ID從BeanFactory 中獲取的實際上是 FactoryBean 的 getObject()返回的對象,?不是 FactoryBean 本身,如果要獲取 FactoryBean 對象,請在id前?加?個 & 符號來獲取。c5L28資訊網——每日最新資訊28at.com

例如??實現?個 FactoryBean,功能:?來代理?個對象,對該對象的所有?法做?個攔截,在調?前后都輸出??LOG,模仿 ProxyFactoryBean 的功能。c5L28資訊網——每日最新資訊28at.com

FactoryBean ?個接?,當在IOC容器中的 Bean 實現了 FactoryBean 后,通過 getBean(StringBeanName) 獲取到的 Bean 對象并不是 FactoryBean 的實現類對象,?是這個實現類中的 getObject()?法返回的對象。要想獲取 FactoryBean 的實現類,就要getBean(&BeanName),在 BeanName 之前加上&.c5L28資訊網——每日最新資訊28at.com

在該接?中還定義了以下3個?法:c5L28資訊網——每日最新資訊28at.com

TgetObject():返回由FactoryBean創建的Bean實例,如果isSingleton()返回true,則該實例會放到Spring容器中單實例緩存池中;booleanisSingleton():返回由FactoryBean創建的Bean實例的作?域是singleton還是prototype;ClassgetObjectType():返回FactoryBean創建的Bean類型。

總結

BeanFactory 是個 Factory,也就是IOC容器或對象??,FactoryBean 是個 Bean。在 Spring 中,所有的 Bean 都是由 BeanFactory(也就是IOC容器)來進?管理的。但對 FactoryBean??,這個 Bean 不是簡單的 Bean ,?是?個能?產或者修飾對象?成的?? Bean,它的實現與設計模式中的??模式和修飾器模式類似。c5L28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-15329-0.htmlSpring的BeanFactory與FactoryBean的區別,你現在懂了嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入理解并發編程藝術之計算機內存模型

下一篇: 【C語言】操作符有幾種?你真的知道嗎?

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當家&rdquo;的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 聯想YOGA 16s 2022筆記本將要推出,屏幕支持觸控功能

    聯想此前宣布,將于11月2日19:30召開聯想秋季輕薄新品發布會,推出聯想 YOGA 16s 2022 筆記本等新品。官方稱,YOGA 16s 2022 筆記本將搭載 16 英寸屏幕,并且是一
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top