java中的ioc是什么相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說(shuō),一起往下看吧。
專業(yè)從事網(wǎng)站設(shè)計(jì)、做網(wǎng)站,高端網(wǎng)站制作設(shè)計(jì),小程序設(shè)計(jì),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠(chéng)服務(wù),采用html5+CSS3前端渲染技術(shù),成都響應(yīng)式網(wǎng)站建設(shè),讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過(guò)程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dòng),隨時(shí)提供解決方案,暢聊想法和感受。
什么是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ù)類(lèi)的全限定名在程序運(yùn)行時(shí)創(chuàng)建對(duì)象,可以這樣做,將類(lèi)的全限定名配置在xml文件中,在程序運(yùn)行時(shí)通過(guò)反射讀取該類(lèi)的全限定名,動(dòng)態(tài)的創(chuàng)建對(duì)象,賦值給userDao接口userDaoImpl.這樣做后UserServiceImpl和UserDaoImpl之間沒(méi)有了直接的關(guān)系,當(dāng)我們需要替換UserDaoImpl對(duì)象的時(shí)候只需要在配置文件中去修改類(lèi)的全限定名就可以了,非常的靈活方便,ioc容器的實(shí)現(xiàn)就是這個(gè)原理。
Ioc容器可以自動(dòng)的幫我們完成以上一系列操作,我們需要做的就是通過(guò)配置文件告訴ioc需要?jiǎng)?chuàng)建哪個(gè)類(lèi)以及類(lèi)和類(lèi)之間的關(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ò),可以把它分享出去讓更多的人看到。
網(wǎng)站標(biāo)題:java中的ioc是什么
文章來(lái)源:http://chinadenli.net/article46/pehjhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、用戶體驗(yàn)、App設(shè)計(jì)、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)