最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring IoC容器知識(shí)點(diǎn)詳解

 更新時(shí)間:2019年09月30日 14:16:03   作者:cnblogs  
在本篇文章里小編給各位整理的是關(guān)于Spring IoC容器的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。

可以把 Spring IoC 容器比作一間餐館,當(dāng)你來到餐館,通常會(huì)直接招呼服務(wù)員:點(diǎn)菜!至于菜的原料是什么?如何用原料把菜做出來?可能你根本就不關(guān)心。IoC 容器也是一樣,你只需要告訴它需要某個(gè)bean,它就把對(duì)應(yīng)的實(shí)例(instance)扔給你,至于這個(gè)bean是否依賴其他組件,怎樣完成它的初始化,根本就不需要你關(guān)心。

作為餐館,想要做出菜肴,得知道菜的原料和菜譜,同樣地,IoC 容器想要管理各個(gè)業(yè)務(wù)對(duì)象以及它們之間的依賴關(guān)系,需要通過某種途徑來記錄和管理這些信息。BeanDefinition對(duì)象就承擔(dān)了這個(gè)責(zé)任:容器中的每一個(gè) bean 都會(huì)有一個(gè)對(duì)應(yīng)的 BeanDefinition 實(shí)例,該實(shí)例負(fù)責(zé)保存bean對(duì)象的所有必要信息,包括 bean 對(duì)象的 class 類型、是否是抽象類、構(gòu)造方法和參數(shù)、其它屬性等等。當(dāng)客戶端向容器請(qǐng)求相應(yīng)對(duì)象時(shí),容器就會(huì)通過這些信息為客戶端返回一個(gè)完整可用的 bean 實(shí)例。微信搜索 web_resource 關(guān)注后獲取更多干貨!

原材料已經(jīng)準(zhǔn)備好(把 BeanDefinition 看著原料),開始做菜吧,等等,你還需要一份菜譜,BeanDefinitionRegistry和BeanFactory就是這份菜譜,BeanDefinitionRegistry 抽象出 bean 的注冊(cè)邏輯,而 BeanFactory 則抽象出了 bean 的管理邏輯,而各個(gè) BeanFactory 的實(shí)現(xiàn)類就具體承擔(dān)了 bean 的注冊(cè)以及管理工作。它們之間的關(guān)系就如下圖:

DefaultListableBeanFactory作為一個(gè)比較通用的 BeanFactory 實(shí)現(xiàn),它同時(shí)也實(shí)現(xiàn)了 BeanDefinitionRegistry 接口,因此它就承擔(dān)了 Bean 的注冊(cè)管理工作。從圖中也可以看出,BeanFactory 接口中主要包含 getBean、containBean、getType、getAliases 等管理 bean 的方法,而 BeanDefinitionRegistry 接口則包含 registerBeanDefinition、removeBeanDefinition、getBeanDefinition 等注冊(cè)管理 BeanDefinition 的方法。

下面通過一段簡(jiǎn)單的代碼來模擬 BeanFactory 底層是如何工作的:

// 默認(rèn)容器實(shí)現(xiàn)
DefaultListableBeanFactory beanRegistry = new DefaultListableBeanFactory();
// 根據(jù)業(yè)務(wù)對(duì)象構(gòu)造相應(yīng)的BeanDefinition
AbstractBeanDefinition definition = new RootBeanDefinition(Business.class,true);
// 將bean定義注冊(cè)到容器中
beanRegistry.registerBeanDefinition("beanName",definition);
// 如果有多個(gè)bean,還可以指定各個(gè)bean之間的依賴關(guān)系
// ........




// 然后可以從容器中獲取這個(gè)bean的實(shí)例
// 注意:這里的beanRegistry其實(shí)實(shí)現(xiàn)了BeanFactory接口,所以可以強(qiáng)轉(zhuǎn),
// 單純的BeanDefinitionRegistry是無法強(qiáng)制轉(zhuǎn)換到BeanFactory類型的
BeanFactory container = (BeanFactory)beanRegistry;
Business business = (Business)container.getBean("beanName");

這段代碼僅為了說明 BeanFactory 底層的大致工作流程,實(shí)際情況會(huì)更加復(fù)雜,比如 bean 之間的依賴關(guān)系可能定義在外部配置文件(XML/Properties)中、也可能是注解方式。Spring IoC 容器的整個(gè)工作流程大致可以分為兩個(gè)階段

以上就是本次介紹的全部知識(shí)點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。

相關(guān)文章

  • idea中如何連接hive

    idea中如何連接hive

    這篇文章主要介紹了idea中如何連接hive問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Spring之關(guān)于PropertyDescriptor的擴(kuò)展剖析

    Spring之關(guān)于PropertyDescriptor的擴(kuò)展剖析

    這篇文章主要介紹了Spring之關(guān)于PropertyDescriptor的擴(kuò)展剖析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java反射的作用知識(shí)點(diǎn)總結(jié)

    java反射的作用知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于java反射的作用知識(shí)點(diǎn)總結(jié),需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • SpringCloud?Tencent?全套解決方案源碼分析

    SpringCloud?Tencent?全套解決方案源碼分析

    Spring Cloud Tencent實(shí)現(xiàn)Spring Cloud標(biāo)準(zhǔn)微服務(wù)SPI,開發(fā)者可以基于Spring Cloud Tencent開發(fā)Spring Cloud微服務(wù)架構(gòu)應(yīng)用,Spring Cloud Tencent 的核心依托騰訊開源的一站式服務(wù)發(fā)現(xiàn)與治理平臺(tái) Polarismesh,實(shí)現(xiàn)各種分布式微服務(wù)場(chǎng)景,感興趣的朋友一起看看吧
    2022-07-07
  • java面試LruCache?和?LinkedHashMap及算法實(shí)現(xiàn)

    java面試LruCache?和?LinkedHashMap及算法實(shí)現(xiàn)

    這篇文章主要為大家介紹了java面試LruCache?和?LinkedHashMap及算法實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Spring Cloud Feign接口返回流的實(shí)現(xiàn)

    Spring Cloud Feign接口返回流的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud Feign接口返回流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java使用redisson實(shí)現(xiàn)分布式鎖的示例詳解

    Java使用redisson實(shí)現(xiàn)分布式鎖的示例詳解

    這篇文章主要為大家詳細(xì)介紹了在Java項(xiàng)目中使用redisson實(shí)現(xiàn)分布式鎖,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-07-07
  • Java設(shè)計(jì)模式中的適配器模式

    Java設(shè)計(jì)模式中的適配器模式

    這篇文章主要介紹了Java設(shè)計(jì)模式中的適配器模式,適配器模式(Adapter Pattern)將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口表示,主的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個(gè)類可以協(xié)同工作。其別名為包裝器
    2022-07-07
  • 詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證

    詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證

    本篇文章主要介紹了詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • Mybatis中Like的三種使用解讀

    Mybatis中Like的三種使用解讀

    這篇文章主要介紹了Mybatis中Like的三種使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

湟中县| 威海市| 锦屏县| 邯郸市| 介休市| 安国市| 浙江省| 滦南县| 邮箱| 黄浦区| 黔东| 杭锦旗| 孟连| 宁晋县| 太仓市| 肇州县| 维西| 赫章县| 洛宁县| 宁德市| 积石山| 平遥县| 浠水县| 桃江县| 安义县| 平定县| 剑阁县| 青川县| 报价| 六枝特区| 旬阳县| 怀集县| 南安市| 互助| 铜山县| 南郑县| 贺州市| 胶州市| 萨迦县| 青阳县| 岳阳县|