<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 1834字,需瀏覽 4分鐘

           ·

          2020-12-15 10:43

          廣義的 IOC

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

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

          通過控制反轉(zhuǎn),對象在被創(chuàng)建的時(shí)候,由一個(gè)調(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í)就是一個(gè)大工廠,它用來管理我們所有的對象以及依賴關(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 時(shí),我們直接在對象內(nèi)部通過 new 進(jìn)行創(chuàng)建對象,是程序主動(dòng)去創(chuàng)建依賴對象;

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

          • 誰控制誰?當(dāng)然是 IOC 容器控制了對象;控制什么?那就是主要控制了外部資源獲?。ú恢皇菍ο筮€包括比如文件等)。

          所謂反轉(zhuǎn):

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

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

          其次,說到 IOC 就會(huì)想到 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è)計(jì)思想。在?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ī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜黄色视频在线观看 | 图片专区亚洲欧美另类 | 99久热| 最新淫色网站 | 丰满老妇高潮一级A片免费看 |