Spring IOC 知识点总结,写得太好了!
廣義的 IOC
在這之前,我們先記住一句話。好萊塢原則:Don’t call me, we will call you.?即“不用打電話過來,我們會(huì)打給你”。
控制反轉(zhuǎn)(Inversion of Control,簡(jiǎn)稱 IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來減低計(jì)算機(jī)代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡(jiǎn)稱 DI),還有一種方式叫“依賴查找”(Dependency Lookup)。
通過控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用傳遞(注入)給它。
兩種實(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è)大工廠,它用來管理我們所有的對(duì)象以及依賴關(guān)系。
-
原理就是通過 Java 的反射技術(shù)來實(shí)現(xiàn)的!通過反射我們可以獲取類的所有信息(成員變量、類名等等等)!
-
再通過配置文件(xml)或者注解來描述類與類之間的關(guān)系
-
我們就可以通過這些配置信息和反射技術(shù)來構(gòu)建出對(duì)應(yīng)的對(duì)象和依賴關(guān)系了!
我們簡(jiǎn)單來看看實(shí)際?Spring?IOC 容器是怎么實(shí)現(xiàn)對(duì)象的創(chuàng)建和依賴的:
1. 根據(jù) Bean 配置信息在容器內(nèi)部創(chuàng)建 Bean 定義注冊(cè)表
2. 根據(jù)注冊(cè)表加載、實(shí)例化 bean、建立 Bean 與 Bean 之間的依賴關(guān)系
3. 將這些準(zhǔn)備就緒的 Bean 放到 Map 緩存池中,等待應(yīng)用程序調(diào)用
Spring 容器(Bean 工廠)可簡(jiǎn)單分成兩種:
-
BeanFactory
-
這是最基礎(chǔ)、面向 Spring 的
-
ApplicationContext
-
ApplicationContext 是 BeanFactory 的子類
沒有特殊要求的情況下,應(yīng)該使用 ApplicationContext 完成。
因?yàn)?BeanFactory 能完成的事情,ApplicationContext 都能完成,并且提供了更多接近現(xiàn)在開發(fā)的功能。
對(duì) IOC 的理解
首先,IOC 控制反轉(zhuǎn)
誰控制誰,控制什么,什么是反轉(zhuǎn)(有反轉(zhuǎn)就應(yīng)該有正轉(zhuǎn)了)
誰控制誰,控制什么:
-
在之前,沒有 IOC 時(shí),我們直接在對(duì)象內(nèi)部通過 new 進(jìn)行創(chuàng)建對(duì)象,是程序主動(dòng)去創(chuàng)建依賴對(duì)象;
-
而現(xiàn)在,是由 IOC 專門一個(gè)容器來創(chuàng)建這些對(duì)象,即由 Ioc 容器來控制對(duì) 象的創(chuàng)建;
-
誰控制誰?當(dāng)然是 IOC 容器控制了對(duì)象;控制什么?那就是主要控制了外部資源獲取(不只是對(duì)象還包括比如文件等)。
所謂反轉(zhuǎn):
-
有反轉(zhuǎn)就應(yīng)該有正轉(zhuǎn),傳統(tǒng)應(yīng)用程序是由我們自己在對(duì)象中主動(dòng)控制去直接獲取依賴對(duì)象,也就是正轉(zhuǎn);
-
而所謂的反轉(zhuǎn),其實(shí)是反轉(zhuǎn)的控制權(quán),由?Spring?來控制對(duì)象的生命周期,那么對(duì)象的控制就完全脫離了我們的控制,控制權(quán)交給了?Spring?。這個(gè)反轉(zhuǎn)是指:我們由對(duì)象的控制者變成了 IOC 的被動(dòng)控制者。
其次,說到 IOC 就會(huì)想到 DI 依賴注入(IOC 是通過 DI 來實(shí)現(xiàn)的),那么:
-
誰依賴誰:A 對(duì)象 依賴于 IOC 容器。
-
為什么需要依賴:A 對(duì)象需要 IOC 容器提供對(duì)象需要的數(shù)據(jù)、B 對(duì)象等外部資源,沒有這些資源不能完成業(yè)務(wù)處理。
-
誰注入誰:IOC 容器注入 A 對(duì)象。
-
注入了什么:IOC 容器將 A 對(duì)象 需要的數(shù)據(jù)、B 對(duì)象等外部資源按需注入給對(duì)象。
好處:降低了開發(fā)的成本,提高了代碼復(fù)用率、軟件的靈活性。
總結(jié)
IOC:不是什么技術(shù),而是一種設(shè)計(jì)思想。在?Spring?開發(fā)中,由 IOC 容器控制對(duì)象的創(chuàng)建、初始化、銷毀等。這也就實(shí)現(xiàn)了對(duì)象控制權(quán)的反轉(zhuǎn),由我們對(duì)對(duì)象的控制轉(zhuǎn)變成了Spring?IOC 對(duì)對(duì)象的控制。
DI:是 IOC 的具體實(shí)現(xiàn)。程序把依賴交給容器,容器幫你管理依賴。
作者:潘佳琪
https://segmentfault.com/a/1190000022015914
總結(jié)
以上是生活随笔為你收集整理的Spring IOC 知识点总结,写得太好了!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring-boot:run 是怎么运
- 下一篇: 艿艿连肝了几个周末,写了一篇贼长的 Sp