依賴注入_控制反轉_依賴反轉,這些值5毛錢的概念到底是什麼

依賴注入:

在面向對象編程中,BusinessA類想要完成其中的 businessA()函數必須依靠BusinessB類中的businessB()函數配合, 那麼此時最符合直覺的做法就是直接在 businessA()函數中 create 一個 BusinessB 調用 businessB()函數.

那麼依賴注入就是要求你不能在 businessA() 函數中new出 BusinessB類而是改爲其他方式,
類似於通過參數傳入businessA(BusinessB bb),
又或是向spring一樣使用註解標記下來,之後在將對象一一注入進去(賦值)

直白來講 就是 對象不再當前函數中創建了 所以對於當前businessA() 函數來說所依賴的對象是從外部注入進來的,也算是一種局部的控制反轉

控制反轉:

在面向對象的編程中,總是避免不了自己new出對象,就如同上面的例子,不在businessA()函數中new 但是如果我要調用businessA()函數總得在調用的時候create BusinessB 類那麼就不得不new了

那麼控制反轉指的就是,原本是我們也就是程序員控制的對象, 此時反轉過來,讓代碼自己控制對象的create, 這就是控制反轉了,只是這些代碼通常比較通用,而只要是通用的代碼,必有好事者將其封裝好,小到工具類,大到框架

直白來講 就是 對象不用手動創建了 所以創建對象之後在配合依賴入駐概念將對象賦值給依賴其的對象

依賴反轉:

在面向對象的編程中高層的代碼總是依賴於底層的代碼,例如常見的三層架構中的 controller層總是會直接依賴於service 間接依賴於Repository 那麼此時當我們的 service 的接口有所變更那麼勢必造成 controller層的的代碼變更, (其實我們的service層來說一般是基於接口,所以只要不改動接口那麼對於controller層面的影響還是可控範圍內的)

那麼依賴反轉指的就是 我們controller與service中的那一層接口了(說是接口其實還不太準確), 就象我們的 tomcat 與 web項目 按照正常來說 高層代碼依賴底層代碼這是很正常的,但是 我們的tomcat卻並不依賴任何的web項目,我們的web項目也不會依賴於tomcat, 它們都是實現 java提供的servlet標準

直白來講 那就是高層代碼不依賴底層實現, 底層實現不依賴高層特性,改爲依賴中間的原則

發佈了31 篇原創文章 · 獲贊 13 · 訪問量 1013
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章