談談你對Spring IOC和DI的理解,以及它們的區別


談談你對Spring IOC 和 DI的理解,以及它們有什么區別?

  IOC是什么?

    IOC--Inversion of Control,即控制反轉,不是什么技術,而是一種設計思想.IOC意味着將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制.

  IOC的優勢是什么?

    IOC是一個重要的面向對象編程的法則,它能指導我們如何設計出松耦合,更優良的程序,傳統的應用程序都是由我們在類的內部主動創建依賴對象,從而導致類與類之間的高耦合,有了IOC容器之后,把創建和查找依賴對象的控制權交給了IOC容器,由容器進行注入組合對象,所以對象和對象之間是松耦合的.

  DI是什么?

    DI--Dependency Injection,即依賴注入,組件之間依賴關系由容器在運行期決定,即由容器動態的將某個依賴關系注入到組件當中,依賴注入的目的並非為軟件系統帶來更多的功能,而是為了提升組件重復使用的頻率,並為系統搭建一個靈活可擴展的平台,通過依賴注入我們只需要使用簡單的配置,而不需要任何代碼就可以指定目標需要的資源,完成業務邏輯,而不需要關心具體的資源來自何處,由誰實現的.

  IOC--控制反轉的通俗解釋:

    所謂的IOC,對於spring框架來說,就是由spring來負責控制對象的生命周期和對象間的關系,所有的類都會在spring容器中登記,告訴spring你是個什么東西,你需要什么東西,然后spring會在系統運行到適當的時候,把你要的東西給你,同時也把你交給其他需要你的東西,所有的類的創建,銷毀都是由spring來控制,也就是說控制對象的生命周期不再是引用它的對象,而是spring,對於某個具體的對象而言,以前是它控制其他對象,而現在所有的對象都由spring控制,所以這就叫控制反轉.

  DI--依賴注入的通俗理解:

    如果程序中A需要依賴B才能正常進行,而這時候B不是自己創建的而是由spring容器注入給A的,spring會在適當的時候創建B,然后像打針一樣注入給A,所以依賴注入的名字就是這么來的.那么DI是如何實現的呢?Java 1.3之后一個重要的特征就是反射(reflection),它允許程序在運行的時候動態的生成對象,執行對象的方法,改變對象的屬性,spring就是通過反射來注入的.

  誰依賴了誰?當然是應用程序依賴於IOC容器;

  為什么需要依賴?應用程序需要IOC容器來提供對象需要的外部資源;

  誰注入誰?IOC容器注入應用程序某個對象,應用程序依賴的對象;

  注入了什么?注入某個對象所需要的外部資源(包括對象,資源,常亮數據);

  IOC和DI有什么關系?

    其實它們是同一個概念的不同角度的描述.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM