1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Spring IOC 知識點(diǎn)總結(jié),寫得太好了!

        共 1834字,需瀏覽 4分鐘

         ·

        2020-12-15 10:43

        廣義的 IOC

        在這之前,我們先記住一句話。好萊塢原則:Don’t call me, we will call you.?即“不用打電話過來,我們會打給你”。

        控制反轉(zhuǎn)(Inversion of Control,簡稱 IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計原則,可以用來減低計算機(jī)代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱 DI),還有一種方式叫“依賴查找”(Dependency Lookup)。

        通過控制反轉(zhuǎn),對象在被創(chuàng)建的時候,由一個調(diào)控系統(tǒng)內(nèi)所有對象的外界實(shí)體,將其所依賴的對象的引用傳遞(注入)給它。

        兩種實(shí)現(xiàn):依賴查找(DL)和依賴注入(DI)。

        IOC 和 DI 、DL 的關(guān)系:

        • DI(Dependency Injection)是?Spring?使用的方式,容器負(fù)責(zé)組件的裝配。

        • DL(Dependency Lookup)已經(jīng)被拋棄。

        IOC 容器的原理

        IOC 容器其實(shí)就是一個大工廠,它用來管理我們所有的對象以及依賴關(guān)系。

        • 原理就是通過 Java 的反射技術(shù)來實(shí)現(xiàn)的!通過反射我們可以獲取類的所有信息(成員變量、類名等等等)!

        • 再通過配置文件(xml)或者注解來描述類與類之間的關(guān)系

        • 我們就可以通過這些配置信息和反射技術(shù)來構(gòu)建出對應(yīng)的對象和依賴關(guān)系了!

        我們簡單來看看實(shí)際?Spring?IOC 容器是怎么實(shí)現(xiàn)對象的創(chuàng)建和依賴的:

        1. 根據(jù) Bean 配置信息在容器內(nèi)部創(chuàng)建 Bean 定義注冊表

        2. 根據(jù)注冊表加載、實(shí)例化 bean、建立 Bean 與 Bean 之間的依賴關(guān)系

        3. 將這些準(zhǔn)備就緒的 Bean 放到 Map 緩存池中,等待應(yīng)用程序調(diào)用

        Spring 容器(Bean 工廠)可簡單分成兩種:

        沒有特殊要求的情況下,應(yīng)該使用 ApplicationContext 完成。

        因?yàn)?BeanFactory 能完成的事情,ApplicationContext 都能完成,并且提供了更多接近現(xiàn)在開發(fā)的功能。

        對 IOC 的理解

        首先,IOC 控制反轉(zhuǎn)

        誰控制誰,控制什么,什么是反轉(zhuǎn)(有反轉(zhuǎn)就應(yīng)該有正轉(zhuǎn)了)

        誰控制誰,控制什么:

        • 在之前,沒有 IOC 時,我們直接在對象內(nèi)部通過 new 進(jìn)行創(chuàng)建對象,是程序主動去創(chuàng)建依賴對象;

        • 而現(xiàn)在,是由 IOC 專門一個容器來創(chuàng)建這些對象,即由 Ioc 容器來控制對 象的創(chuàng)建;

        • 誰控制誰?當(dāng)然是 IOC 容器控制了對象;控制什么?那就是主要控制了外部資源獲取(不只是對象還包括比如文件等)。

        所謂反轉(zhuǎn):

        • 有反轉(zhuǎn)就應(yīng)該有正轉(zhuǎn),傳統(tǒng)應(yīng)用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉(zhuǎn);

        • 而所謂的反轉(zhuǎn),其實(shí)是反轉(zhuǎn)的控制權(quán),由?Spring?來控制對象的生命周期,那么對象的控制就完全脫離了我們的控制,控制權(quán)交給了?Spring?。這個反轉(zhuǎn)是指:我們由對象的控制者變成了 IOC 的被動控制者。

        其次,說到 IOC 就會想到 DI 依賴注入(IOC 是通過 DI 來實(shí)現(xiàn)的),那么:

        • 誰依賴誰:A 對象 依賴于 IOC 容器。

        • 為什么需要依賴:A 對象需要 IOC 容器提供對象需要的數(shù)據(jù)、B 對象等外部資源,沒有這些資源不能完成業(yè)務(wù)處理。

        • 誰注入誰:IOC 容器注入 A 對象。

        • 注入了什么:IOC 容器將 A 對象 需要的數(shù)據(jù)、B 對象等外部資源按需注入給對象。

        好處:降低了開發(fā)的成本,提高了代碼復(fù)用率、軟件的靈活性。

        總結(jié)

        IOC:不是什么技術(shù),而是一種設(shè)計思想。在?Spring?開發(fā)中,由 IOC 容器控制對象的創(chuàng)建、初始化、銷毀等。這也就實(shí)現(xiàn)了對象控制權(quán)的反轉(zhuǎn),由我們對對象的控制轉(zhuǎn)變成了Spring?IOC 對對象的控制。

        DI:是 IOC 的具體實(shí)現(xiàn)。程序把依賴交給容器,容器幫你管理依賴。

        作者:潘佳琪
        https://segmentfault.com/a/1190000022015914



        加武哥微信,免費(fèi)領(lǐng)取

        10萬字Springboot經(jīng)典筆記

        100本優(yōu)質(zhì)電子書


        點(diǎn)贊是最大的支持?

        瀏覽 49
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人性生交大片免费看无遮挡aⅴ | 日韩欧美手机在线 | 国产女人十八毛片 | 天天干天天干天天干 | 国产精品无码一区二区三区免费 | www.激情五月天.com | 青青草视频首页 | 天天网综合 | 啪啪高清无码视频 | 日日摸天天爽天天爽电影 |