日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Spring的BeanFactory與FactoryBean的區(qū)別,你現(xiàn)在懂了嗎?

來(lái)源: 責(zé)編: 時(shí)間:2023-10-27 09:15:15 369觀看
導(dǎo)讀我們還是來(lái)剖析面試題,今天了不起來(lái)來(lái)帶大家看看這個(gè)需要看源碼的面試題,因?yàn)槊嬖嚨臅r(shí)候,有很多情況不一定需要去看源碼就能回答的問(wèn)題,但是也有很多的問(wèn)題是需要我們?nèi)タ丛创a才能回答的問(wèn)題,今天我們就來(lái)看看一個(gè)比較經(jīng)典

我們還是來(lái)剖析面試題,今天了不起來(lái)來(lái)帶大家看看這個(gè)需要看源碼的面試題,因?yàn)槊嬖嚨臅r(shí)候,有很多情況不一定需要去看源碼就能回答的問(wèn)題,但是也有很多的問(wèn)題是需要我們?nèi)タ丛创a才能回答的問(wèn)題,今天我們就來(lái)看看一個(gè)比較經(jīng)典的問(wèn)題,也是關(guān)于Spring 的面試題。Ra928資訊網(wǎng)——每日最新資訊28at.com

BeanFactory

BeanFactory 是 Spring 容器的頂級(jí)接?,給具體的IOC容器的實(shí)現(xiàn)提供了規(guī)范。Ra928資訊網(wǎng)——每日最新資訊28at.com

BeanFactory 只是個(gè)接口,并不是IOC容器的具體實(shí)現(xiàn).Ra928資訊網(wǎng)——每日最新資訊28at.com

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

BeanFactory 的實(shí)現(xiàn)

Spring 容器給出了很多種實(shí)現(xiàn),如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext 等。而這些具體的容器都是實(shí)現(xiàn)了 BeanFactory ,再在其基礎(chǔ)之上附加了其他的功能。Ra928資訊網(wǎng)——每日最新資訊28at.com

DefaultListableBeanFactoryRa928資訊網(wǎng)——每日最新資訊28at.com

BeanFactory 接口體系的默認(rèn)實(shí)現(xiàn)類,實(shí)現(xiàn)以上接口的功能,提供 BeanDefinition 的存儲(chǔ) map ,Bean 對(duì)象對(duì)象的存儲(chǔ) map 。Ra928資訊網(wǎng)——每日最新資訊28at.com

其中 Bean 對(duì)象實(shí)例的存儲(chǔ) map ,定義在 FactoryBeanRegistrySupport , FactoryBeanRegistrySupport 實(shí)現(xiàn)了 SingletonBeanRegistry 接口,而 DefaultListableBeanFactory 的基類 AbstractBeanFactory ,繼承于 FactoryBeanRegistrySupport。Ra928資訊網(wǎng)——每日最新資訊28at.com

StaticListableBeanFactoryRa928資訊網(wǎng)——每日最新資訊28at.com

用于存儲(chǔ)給定的 bean 對(duì)象實(shí)例,不支持動(dòng)態(tài)注冊(cè)功能,是 ListableBeanFactory 接口的簡(jiǎn)單實(shí)現(xiàn)。Ra928資訊網(wǎng)——每日最新資訊28at.com

ApplicationContextRa928資訊網(wǎng)——每日最新資訊28at.com

ApplicationContext 包含 BeanFactory 的所有功能,通常建議? BeanFactory 優(yōu)先。Ra928資訊網(wǎng)——每日最新資訊28at.com

ApplicationContext 以?種更向?向框架的?式?作以及對(duì)上下?進(jìn)?分層和實(shí)現(xiàn)繼承,ApplicationContext 包還提供了以下的功能:Ra928資訊網(wǎng)——每日最新資訊28at.com

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

BeanFactory 提供的?法及其簡(jiǎn)單,僅提供了六種?法供客戶調(diào)?:源碼如下Ra928資訊網(wǎng)——每日最新資訊28at.com

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

而 FactoryBean 是干什么用的呢?Ra928資訊網(wǎng)——每日最新資訊28at.com

FactoryBean

?般情況下,Spring 通過(guò)反射機(jī)制利? <bean>  的 class 屬性指定實(shí)現(xiàn)類實(shí)例化 Bean,在某些情況下,實(shí)例化 Bean 過(guò)程?較復(fù)雜,如果按照傳統(tǒng)的?式,則需要在 <bean> 中提供?量的配置信息。配置?式的靈活性是受限的,這時(shí)采?編碼的?式可能會(huì)得到?個(gè)簡(jiǎn)單的?案。Ra928資訊網(wǎng)——每日最新資訊28at.com

Spring 為此提供了?個(gè) org.springframework.bean.factory.FactoryBean 的??類接?,?戶可以通過(guò)實(shí)現(xiàn)該接?定制實(shí)例化Bean的邏輯。FactoryBean 接?對(duì)于 Spring 框架來(lái)說(shuō)占?重要的地位,Spring ?身就提供了70多個(gè) FactoryBean 的實(shí)現(xiàn)。它們隱藏了實(shí)例化?些復(fù)雜 Bean 的細(xì)節(jié),給上層應(yīng)?帶來(lái)了便利。從 Spring3.0 開(kāi)始,F(xiàn)actoryBean 開(kāi)始?持泛型,即接?聲明改為 FactoryBean<T> 的形式Ra928資訊網(wǎng)——每日最新資訊28at.com

以 Bean 結(jié)尾,表示它是?個(gè) Bean ,不同于普通 Bean 的是:它是實(shí)現(xiàn)了 FactoryBean<T> 接?的 Bean ,根據(jù)該 Bean 的ID從BeanFactory 中獲取的實(shí)際上是 FactoryBean 的 getObject()返回的對(duì)象,?不是 FactoryBean 本身,如果要獲取 FactoryBean 對(duì)象,請(qǐng)?jiān)趇d前?加?個(gè) & 符號(hào)來(lái)獲取。Ra928資訊網(wǎng)——每日最新資訊28at.com

例如??實(shí)現(xiàn)?個(gè) FactoryBean,功能:?來(lái)代理?個(gè)對(duì)象,對(duì)該對(duì)象的所有?法做?個(gè)攔截,在調(diào)?前后都輸出??LOG,模仿 ProxyFactoryBean 的功能。Ra928資訊網(wǎng)——每日最新資訊28at.com

FactoryBean ?個(gè)接?,當(dāng)在IOC容器中的 Bean 實(shí)現(xiàn)了 FactoryBean 后,通過(guò) getBean(StringBeanName) 獲取到的 Bean 對(duì)象并不是 FactoryBean 的實(shí)現(xiàn)類對(duì)象,?是這個(gè)實(shí)現(xiàn)類中的 getObject()?法返回的對(duì)象。要想獲取 FactoryBean 的實(shí)現(xiàn)類,就要getBean(&BeanName),在 BeanName 之前加上&.Ra928資訊網(wǎng)——每日最新資訊28at.com

在該接?中還定義了以下3個(gè)?法:Ra928資訊網(wǎng)——每日最新資訊28at.com

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

總結(jié)

BeanFactory 是個(gè) Factory,也就是IOC容器或?qū)ο??,F(xiàn)actoryBean 是個(gè) Bean。在 Spring 中,所有的 Bean 都是由 BeanFactory(也就是IOC容器)來(lái)進(jìn)?管理的。但對(duì) FactoryBean??,這個(gè) Bean 不是簡(jiǎn)單的 Bean ,?是?個(gè)能?產(chǎn)或者修飾對(duì)象?成的?? Bean,它的實(shí)現(xiàn)與設(shè)計(jì)模式中的??模式和修飾器模式類似。Ra928資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-15329-0.htmlSpring的BeanFactory與FactoryBean的區(qū)別,你現(xiàn)在懂了嗎?

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 深入理解并發(fā)編程藝術(shù)之計(jì)算機(jī)內(nèi)存模型

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 5月iOS設(shè)備性能榜:M1 M2依舊是榜單前五

    和上個(gè)月一樣,沒(méi)有新品發(fā)布的iOS設(shè)備性能榜的上榜設(shè)備并沒(méi)有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動(dòng),剛剛開(kāi)始的蘋果WWDC2023,推出的產(chǎn)品也依舊是新款Mac Pro、新款Mac Stu
  • 跑分安卓第一!Redmi K60至尊版8月發(fā)布!盧偉冰:目標(biāo)年度性能之王

    8月5日消息,Redmi K60至尊版將于8月發(fā)布,在此前舉行的戰(zhàn)略發(fā)布會(huì)上,官方該機(jī)將搭載搭載天璣9200+處理器,安兔兔V10跑分超177萬(wàn)分,是目前安卓陣營(yíng)最高的分?jǐn)?shù)
  • 一年經(jīng)驗(yàn)在二線城市面試后端的經(jīng)驗(yàn)分享

    忠告這篇文章只適合2年內(nèi)工作經(jīng)驗(yàn)、甚至沒(méi)有工作經(jīng)驗(yàn)的朋友閱讀。如果你是2年以上工作經(jīng)驗(yàn),請(qǐng)果斷劃走,對(duì)你沒(méi)啥幫助~主人公這篇文章內(nèi)容來(lái)自 「升職加薪」星球星友 的投稿,坐
  • 從 Pulsar Client 的原理到它的監(jiān)控面板

    背景前段時(shí)間業(yè)務(wù)團(tuán)隊(duì)偶爾會(huì)碰到一些 Pulsar 使用的問(wèn)題,比如消息阻塞不消費(fèi)了、生產(chǎn)者消息發(fā)送緩慢等各種問(wèn)題。雖然我們有個(gè)監(jiān)控頁(yè)面可以根據(jù) topic 維度查看他的發(fā)送狀態(tài),
  • 雅柏威士忌多款單品價(jià)格大跌,泥煤頂流也不香了?

    來(lái)源 | 烈酒商業(yè)觀察編 | 肖海林今年以來(lái),威士忌市場(chǎng)開(kāi)始出現(xiàn)了降溫跡象,越來(lái)越多不斷暴漲的網(wǎng)紅威士忌也開(kāi)始悄然回歸市場(chǎng)理性。近日,LVMH集團(tuán)旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 阿里瓴羊One推出背后,零售企業(yè)迎數(shù)字化新解

    作者:劉曠近年來(lái)隨著數(shù)字經(jīng)濟(jì)的高速發(fā)展,各式各樣的SaaS應(yīng)用服務(wù)更是層出不窮,但本質(zhì)上SaaS大多局限于單一業(yè)務(wù)流層面,對(duì)用戶核心關(guān)切的增長(zhǎng)問(wèn)題等則沒(méi)有提供更好的解法。在Saa
  • 機(jī)構(gòu)稱Q2國(guó)內(nèi)智能手機(jī)銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據(jù)市場(chǎng)調(diào)查機(jī)構(gòu)Counterpoint Research公布的最新報(bào)告,2023年第2季度中國(guó)智能手機(jī)銷量同比下降4%,創(chuàng)新自2014年以來(lái)第2季度銷量新低。報(bào)
  • 蘋果MacBook Pro 2021測(cè)試:仍不支持平滑滾動(dòng)

    據(jù)10月30日9to5 Mac 消息報(bào)道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯(cuò)的評(píng)價(jià),亮點(diǎn)包括行業(yè)領(lǐng)先的性能,令人印象深刻的電池續(xù)航,精美豐
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日?qǐng)?bào) 記者 王春   □ 本報(bào)通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個(gè)大學(xué)生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 云和县| 祁东县| 黄平县| 盘锦市| 宁波市| 乌海市| 丰顺县| 阿拉善左旗| 德阳市| 阳原县| 绥江县| 旅游| 高唐县| 海城市| 天柱县| 和政县| 东宁县| 华安县| 资阳市| 清镇市| 乌什县| 博乐市| 丘北县| 台中县| 龙里县| 昂仁县| 邵武市| 和顺县| 甘孜| 富平县| 阳谷县| 策勒县| 嘉义县| 抚州市| 苏州市| 大荔县| 兴化市| 婺源县| 南郑县| 银川市| 建宁县|