簡單的說一下Spring IOC 的本質

2021-10-10 11:49:52 字數 2114 閱讀 5711

ioc 全稱為 inversionofcontrol,翻譯為 「控制反轉」,它還有乙個別名為 di( dependencyinjection),即依賴注入。

ioc本質

控制反轉ioc(inversion of control),是一種設計思想,di(依賴注入)是實現ioc的一種方法,也有人認為di只是ioc的另一種說法。沒有ioc的程式中 , 我們使用物件導向程式設計 , 物件的建立與物件間的依賴關係完全硬編碼在程式中,物件的建立由程式自己控制,控制反轉後將物件的建立轉移給第三方,個人認為所謂控制反轉就是:獲得依賴物件的方式反轉了。

oc是spring框架的核心內容,使用多種方式完美的實現了ioc,可以使用xml配置,也可以使用註解,新版本的spring也可以零配置實現ioc。

spring容器在初始化時先讀取配置檔案,根據配置檔案或元資料建立與組織物件存入容器中,程式使用時再從ioc容器中取出需要的物件。

採用xml方式配置bean的時候,bean的定義資訊是和實現分離的,而採用註解的方式可以把兩者合為一體,bean的定義資訊直接以註解的形式定義在實現類中,從而達到了零配置的目的。

控制反轉是一種通過描述(xml或註解)並通過第三方去生產或獲取特定物件的方式。在spring中實現控制反轉的是ioc容器,其實現方法是依賴注入(dependency injection,di)。

在沒有學習spring之前處理乙個業務的步驟。

userdao介面。

public

inte***ce

userdao

userdaoimpl實現類。

public

class

userdaoimpl

implements

userdao

}

userservice業務介面。

public

inte***ce

userservice

userserviceimpl業務實現類。

public

class

userserviceimpl

implements

userservice

}

main方法

public

static

void

main

(string[

] args)

那麼此時問題來了,如果增加了乙個mysql的是實現類

public

class

userdaomysqlimpl

implements

userdao

}

就會去業務層修改**。

public

class

userserviceimpl

implements

userservice

}

使用者的需求,可能會影響我們原來的**,需要根據使用者的需求修改源**。

如果**量大,這將會是乙個大工程啊,如何怎麼解決這個問題了?修改業務層實現類。

public

class

userserviceimpl

implements

userservice

public

void

getuser()

}

在mian方法修set注入。

之前是程式主動建立物件,控制器權在程式設計師手裡。

在業務層使用set注入後,程式不在具有主動性,而是變成了被動的接收物件。

這種思想從本質上解決了問題,程式設計師不需要管理物件的建立,降低了系統耦合性。更加專注業務的實現。這就是ioc的原型。

public

static

void

main

(string[

] args)

簡單說一下Spring IoC 控制反轉

為什麼要用spring ioc 控制反轉 在傳統程式設計模式下,呼叫者通常會採用 new 被呼叫者 的 方式來建立物件。但是這種 會增加呼叫者的與被呼叫者之間的耦合性,不利於後期 的公升級與維護。什麼是spring ioc 控制反轉 spring容器會負責控制程式之間的關係,而不是由呼叫者的程式 直...

說一下Docker 一

對於提高伺服器的效能,支援輕量級的虛擬,實現開發測試上線的高度一致,團隊開發環境的協調統一,docker表現得極為出色。在功能上,我們將docker理解為乙個超輕量級的虛擬機器,它比vmware占用的資源少很多,執行速度快很多,因為它們的底層實現技術完全不同。docker就像乙個模具,我們能在作業系...

說一下JS的hasOwnProperty

for in的時候,它會把物件的屬性 包括原型的屬性 遍歷一遍 例如 有這麼一段 var array array.push 1 array.push 2 array.push 3 for var i in array 此時會輸出什麼呢?當然是0 1 1 2 2 3 但是如果在for in之前加上ar...