您好,登錄后才能下訂單哦!
java中的ioc是什么相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,話不多說,一起往下看吧。
什么是ioc
ioc全稱是【Inversion of Control】控制反轉,按照字面意思理解,將控制反轉過來。
為什么要有ioc
java是一門面向對象的語言,我們的應用程序通過一個個對象之間的相互關聯和作用來完成功能,在網上看到一個特別形象的比喻,這里借用一下:
這里的每一個齒輪代表一個對象,對象之間彼此緊密咬合形成一個系統,這樣的系統對象之間的耦合度非常高,所謂的耦合度就是關系的緊密程度,高耦合度帶來的問題顯而易見,只要有一個齒輪發生故障,其它齒輪也無法工作,進而整個系統都無法正常工作,這種牽一發而動全身情況如何才能改善呢?看下圖:
中間這個齒輪好比一個粘合劑將其它幾個齒輪粘合起來,所有的齒輪都交由中間這個齒輪管理,試著把中間這個齒輪拿掉我們可以看到這三個齒輪之間彼此毫無關系,即使一個齒輪出了故障,也不會影響到其它齒輪,中間這個齒輪就好比ioc容器,其它齒輪就是對象,可以看出引入了ioc容器,對象之間的耦合度降低了。當我們修改一個對象的時候不需要去考慮其它對象,因為它不會對其它對象造成影響。
ioc的原理
這里說到的ioc容器到底是個什么東東,又是什么讓它具有如此神奇的力量?
先來看一下沒有ioc容器的時候,對象A依賴對象B,A在運行到某一時刻的時候會去創建B的對象,在這里A具有主動權,它控制了對象B的創建。
引入ioc以后對象A和對象B之間沒有了直接聯系,當A運行的時候由ioc容器創建B對象在適當的時候注入到A中,在這里,控制權由A對象轉移到了ioc容器。這也就是控制反轉名稱的由來。
看一個例子:
public class UserServiceImpl {
private UserDao userDaoImpl
public List<User> getAllUser(){
userDaoImpl = new UserDaoImpl();
return userDaoImpl.getAllUser();
}
}
這里UserServiceImpl依賴UserDaoImpl,需要在UserServiceImpl中創建UserDaoImpl對象,對象之間的耦合性很高,如何解耦呢?
我們可以通過反射來解耦,反射可以根據類的全限定名在程序運行時創建對象,可以這樣做,將類的全限定名配置在xml文件中,在程序運行時通過反射讀取該類的全限定名,動態的創建對象,賦值給userDao接口userDaoImpl.這樣做后UserServiceImpl和UserDaoImpl之間沒有了直接的關系,當我們需要替換UserDaoImpl對象的時候只需要在配置文件中去修改類的全限定名就可以了,非常的靈活方便,ioc容器的實現就是這個原理。
Ioc容器可以自動的幫我們完成以上一系列操作,我們需要做的就是通過配置文件告訴ioc需要創建哪個類以及類和類之間的關系。
控制反轉和依賴注入
在這里需要提到一個概念依賴注入,很多初學者搞不清楚控制反轉和依賴注入之間的關系,其實他們是對同一事務的不同角度的描述。
控制反轉是一種設計思想而依賴注入是這種思想的具體實現
具體說控制反轉就是將創建userDaoImpl對象的控制權反轉過來由UserServiceImpl交給了ioc容器,強調的是一種能力和思想,ioc容器具有了控制權。
依賴注入就是ioc容器將UserServiceImpl所依賴的對象userDaoImpl,注入給UserServiceImpl,強調的是一個過程和實現
關于java中的ioc就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。