天天看點

網際網路面試-如何了解Spring架構中的控制反轉(IOC)?

作者:架構師面試寶典
網際網路面試-如何了解Spring架構中的控制反轉(IOC)?

IOC(Inversion of Control),控制反轉,其實控制反轉并不是某種技術,而是一種軟體程式設計思想。也就是在使用Spring架構的時候将需要使用對象交給了容器來進行控制,而不是由開發者自己來控制對象的建立與銷毀。那麼如何來更好的了解IOC操作呢?下面我們就來詳細的介紹一下關于IOC的操作。

誰控制了誰?控制了那些内容?

對于傳統的JavaSE程式設計來說,當我們在代碼中需要使用一個對象的時候,需要通過new的方式來進行建立,并且這個建立過程是由使用程式主動的去建立并進行使用的。那麼IOC的思想就是通過一個公共的容器來去控制建立這些對象。這樣就解釋了誰控制了誰?在IOC中就是容器控制了對象;控制的是什麼?在JavaSE建立對象的時候,是使用者來進行建立的,但是在IOC中是由容器來建立的,那麼自然,容器所控制的就是對于這些對象的具體的操作了。

網際網路面試-如何了解Spring架構中的控制反轉(IOC)?

圖檔來源網絡

為什麼會被稱為是控制反轉呢?

對于一個正常的調用來講,都是在使用的時候使用者主動的去建立對象,然後進行調用。而IOC則是通過了一個對象容器來建立了這些對象,也就是說這些對象不管用不用都是在這個容器中的,也就是不需要我們再去主動的調用去建立對象了,我們隻需要調用容器來使用這些對象就可以了。這個時候這些對象就可以看做是被動的接受我們的調用。是以所謂的反轉就是指對象的擷取方式被反轉了,由原來的的主動調用,變成了被動被擷取。

網際網路面試-如何了解Spring架構中的控制反轉(IOC)?

圖檔來源網絡

IOC能做什麼?

根據前面的介紹我們明白了IOC其實并不是一種技術,而是一種程式實作思想,是一種實作松耦合的程式設計思想。

在傳統的JavaSE程式設計過程中都是通過主動調用來完成對象的建立工作。這樣子程式與程式之間的耦合度過高。盡管有Java的三大特性的加持,但是還是會出現各種各樣的問題。

有了IOC容器之後,将這些對象建立、管理、控制權都交給了ICO容器。由容器來完成對象的建立、組合。這樣的話就不需要在主動調用的時候去建立對象的依賴,達到了使用與建立的解耦,并且友善了重複利用,使得整個的代碼體系結構變的更加的靈活。

IOC所帶來的并不是技術上的多大的改變,而是程式設計思想上的巨大變化。這樣的變化極大的提升了程式的開發效率。所有的對象的建立依賴操作都是通過容器來進行,減少了開發者去查詢建立對象依賴操作。

依賴注入ID是什麼?

ID(Dependency Injection)依賴注入,在容器運作的過程中決定了元件與元件之間的依賴關系,也就是說容器動态的管理了對象的依賴關系。而依賴注入的目的并非是給程式帶來更多的功能,而是為了提升元件的重複使用率,這樣不同的元件可以在系統的不同位置被重複使用。通過依賴注入的方式,可以通過簡單的幾個小配置就可以完成指定元件的裝配,完成定制化業務的開發。

為什麼需要進行依賴?

在上面我們提到過對象的建立是由容器決定的,但是建立什麼樣的對象是由業務邏輯來決定的,是以說容器需要依賴外部的資源來決定提供什麼樣的對象。

誰依賴于誰?

根據上面的介紹,由于對象的建立是容器來管理,而使用對象則是應用程式來使用,是以是應用程式依賴于容器。

誰注入了誰?

顯然,是往IOC容器中注入應用程式中某個使用的對象。

注入了什麼?

應用程式要根據具體的業務來使用指定的對象,是以注入的應該是依賴了某些外部資源的對象,用來完成應用程式的某些業務場景。

IOC與DI的關系

由于控制反轉的概念是一個程式設計思想,而依賴注入更像是一種具體的實作方式。是以說IOC是DI操作的核心思想而DI操作則是IOC思想的具體實作。