自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

開發(fā) 前端
控制反轉(zhuǎn)(Inversion of Control),簡(jiǎn)稱IoC,它不是一門技術(shù),而是一種設(shè)計(jì)思想,一個(gè)重要的面向?qū)ο缶幊痰姆▌t。它能指導(dǎo)我們?nèi)绾卧O(shè)計(jì)出松耦合、更優(yōu)良的程序。

 控制反轉(zhuǎn)

控制反轉(zhuǎn)(Inversion of Control),簡(jiǎn)稱IoC,它不是一門技術(shù),而是一種設(shè)計(jì)思想,一個(gè)重要的面向?qū)ο缶幊痰姆▌t。它能指導(dǎo)我們?nèi)绾卧O(shè)計(jì)出松耦合、更優(yōu)良的程序。

傳統(tǒng)應(yīng)用程序都是由我們?cè)陬悆?nèi)部主動(dòng)創(chuàng)建依賴對(duì)象,從而導(dǎo)致類與類之間高耦合,難于測(cè)試。如下圖所示:

 

「系統(tǒng)架構(gòu)」什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

 

圖一

但有了IoC容器后,我們可以把創(chuàng)建和查找依賴對(duì)象的控制權(quán)交給了容器,由容器進(jìn)行注入組合對(duì)象,所以對(duì)象與對(duì)象之間是松散耦合,這樣也方便測(cè)試,利于功能復(fù)用,更重要的是使得程序的整個(gè)體系結(jié)構(gòu)變得非常靈活。如下圖所示:

 

「系統(tǒng)架構(gòu)」什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

 

圖二

依賴注入

依賴注入(Dependency Injection),簡(jiǎn)稱DI ,它也不是一門技術(shù),它是一種實(shí)現(xiàn) IoC 的方式,是組件之間依賴關(guān)系由容器在運(yùn)行期決定,形象的說,即由容器動(dòng)態(tài)的將某個(gè)依賴關(guān)系注入到組件之中。

依賴注入的目的并非為軟件系統(tǒng)帶來更多功能,而是為了提升組件重用的頻率,并為系統(tǒng)搭建一個(gè)靈活、可擴(kuò)展的平臺(tái)。通過依賴注入機(jī)制,我們只需要通過簡(jiǎn)單的配置,而無需任何代碼就可指定目標(biāo)需要的資源,完成自身的業(yè)務(wù)邏輯,而不需要關(guān)心具體的資源來自何處,由誰實(shí)現(xiàn)。如圖二所示。

什么是容器?

容器是一種為某種特定組件的運(yùn)行提供必要支持的一個(gè)軟件環(huán)境。例如,Tomcat就是一個(gè)Servlet容器,它可以為Servlet的運(yùn)行提供運(yùn)行環(huán)境。類似Docker這樣的軟件也是一個(gè)容器,它提供了必要的Linux環(huán)境以便運(yùn)行一個(gè)特定的Linux進(jìn)程。

在這里,容器就是指實(shí)現(xiàn)自動(dòng)管理對(duì)象依賴關(guān)系,避免手工管理存在的缺陷,管理對(duì)象生命周期的環(huán)境。

下面用偽代碼來說明,容器、控制反轉(zhuǎn)、依賴注入三者之間的關(guān)系。

我們知道電腦一般有接入外置鍵盤、鼠標(biāo)、U 盤的能力。如下:

 

「系統(tǒng)架構(gòu)」什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

 

但是這個(gè)能力一般要依賴USB接口,如下:

 

「系統(tǒng)架構(gòu)」什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

 

如果不使用依賴注入,我們一般會(huì)采用直接在程序內(nèi)部new一個(gè)對(duì)象的方式,如下:

 

「系統(tǒng)架構(gòu)」什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

 

在永不升級(jí)的時(shí)候,這樣做是沒有太大問題的,因?yàn)槲覀兺瑯涌梢詫?shí)現(xiàn)一次操作終生使用的效果。但現(xiàn)實(shí)是即使強(qiáng)大的神機(jī)也會(huì)面臨歲月的折磨,我們的 USB 接口同樣在某天會(huì)變得老化,速度頗慢,跟不上時(shí)代的步伐,更不兼容最新的 Type-C 接口。于是我們需要升級(jí),但是,如果像之前那樣直接new,那你需要直接修改核心邏輯,如果有多個(gè)地方使用,那你就需要修改多個(gè)地方。就等同于你要更換一個(gè)USB 接口,那你需要更換主板(忽略處理器、內(nèi)存等接口版本差異),拆機(jī)、裝機(jī)、插跳線、配置 BIOS 等工作,極其麻煩。那我們是否可以將這個(gè)工作交給 別人 來完成,從而我們僅僅當(dāng)一個(gè)電腦的使用者就好?

將這個(gè)復(fù)雜的工作、控制權(quán)交給所謂的“別人”替我們完成的思想就叫做 控制反轉(zhuǎn)。

而我們將這項(xiàng)工作移交給 幫手 來完成,交給幫手完成的操作實(shí)現(xiàn)就是 依賴注入。

依賴注入有兩種方式,一種是通過構(gòu)造函數(shù),如下構(gòu)造函數(shù)中的Helper參數(shù):

 

「系統(tǒng)架構(gòu)」什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

 

另一種是通過setter方法進(jìn)行賦值。

從上圖我們可以看到,只要我們通過$helper注入不同的USB接口對(duì)象,這臺(tái)Computer就可以實(shí)現(xiàn)不同的USB切換。

雖然,現(xiàn)在可以實(shí)現(xiàn)依賴注入,但是每次都需要我們手動(dòng)傳遞。如果這樣的依賴注入有很多,后期維護(hù)將是一個(gè)繁雜的工程。

這時(shí)容器的作用就體現(xiàn)出來了,這里容器就是根據(jù)類名,自動(dòng)實(shí)現(xiàn)類的實(shí)例化,并且調(diào)用相關(guān)的方法,如下圖所示。

 

「系統(tǒng)架構(gòu)」什么是容器?什么是控制反轉(zhuǎn)?什么是依賴注入?

 

這里的關(guān)鍵就是類的反射。通過反射獲取類的構(gòu)造函數(shù)及參數(shù),然后通過構(gòu)造函數(shù)實(shí)現(xiàn)依賴注入,最后達(dá)到控制反轉(zhuǎn)的目的。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2021-09-08 19:46:11

容器鏡像Linux

2021-03-20 22:46:22

IaaSSaaSPaaS

2023-09-01 13:49:00

內(nèi)存進(jìn)程線程

2017-12-19 21:29:58

物聯(lián)網(wǎng)區(qū)塊鏈大數(shù)據(jù)

2018-03-22 14:47:13

容器開發(fā)人員筆記本

2020-11-20 10:51:03

云計(jì)算

2023-06-13 15:12:25

2021-09-11 15:38:23

容器運(yùn)行鏡像開放

2020-10-23 17:21:51

容器CaaS技術(shù)

2018-01-30 11:17:56

集群分布式SOA?

2024-04-22 00:00:00

幽靈依賴前端

2023-09-14 15:00:31

2022-08-15 06:00:00

二進(jìn)制編程語言

2012-04-25 17:15:44

EA

2009-07-16 09:56:32

什么是iBATIS

2016-06-13 14:49:40

2010-08-26 09:27:53

DHCP服務(wù)器

2011-08-16 18:39:05

Ubuntu

2016-05-09 10:31:29

DockerLinux

2021-07-28 09:48:54

XML標(biāo)記語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)