亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中的ioc是什么

發布時間:2020-06-03 20:01:10 來源:億速云 閱讀:349 作者:Leah 欄目:編程語言

java中的ioc是什么相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,話不多說,一起往下看吧。

什么是ioc

ioc全稱是【Inversion of Control】控制反轉,按照字面意思理解,將控制反轉過來。

為什么要有ioc

java是一門面向對象的語言,我們的應用程序通過一個個對象之間的相互關聯和作用來完成功能,在網上看到一個特別形象的比喻,這里借用一下:

java中的ioc是什么


這里的每一個齒輪代表一個對象,對象之間彼此緊密咬合形成一個系統,這樣的系統對象之間的耦合度非常高,所謂的耦合度就是關系的緊密程度,高耦合度帶來的問題顯而易見,只要有一個齒輪發生故障,其它齒輪也無法工作,進而整個系統都無法正常工作,這種牽一發而動全身情況如何才能改善呢?看下圖:

java中的ioc是什么

中間這個齒輪好比一個粘合劑將其它幾個齒輪粘合起來,所有的齒輪都交由中間這個齒輪管理,試著把中間這個齒輪拿掉我們可以看到這三個齒輪之間彼此毫無關系,即使一個齒輪出了故障,也不會影響到其它齒輪,中間這個齒輪就好比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就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顺县| 东莞市| 宝清县| 祥云县| 松阳县| 湄潭县| 凉城县| 兴山县| 河曲县| 鲁山县| 永州市| 南和县| 宁海县| 杨浦区| 平和县| 平舆县| 吉木乃县| 周宁县| 盐源县| 陕西省| 四川省| 弋阳县| 康平县| 泊头市| 皮山县| 苍山县| 城步| 西昌市| 海淀区| 紫阳县| 西乌珠穆沁旗| 六枝特区| 正镶白旗| 康马县| 鄂尔多斯市| 蓝田县| 图木舒克市| 密云县| 黔西| 肇州县| 宁津县|