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