對于IOC(Inversion of Control),很多人有不同的見解,這相當于“一千人心中有一千個哈姆雷特”,其實說來說去總是離不開“控制反轉(zhuǎn)”和“依賴注入”。不要把IOC當成一種什么的很高深的技術(shù),它只是一種概念,告訴你Spring針對程序解耦的實現(xiàn)方法。
首先我們來詳細說一下什么叫“控制反轉(zhuǎn)”,分解為兩個關(guān)鍵詞:控制和反轉(zhuǎn)
①傳統(tǒng)的JavaSE中我們?nèi)绻谝粋€對象引入其他對象,習(xí)慣用new,這樣我們就可以用這個對象資源,而IOC則是將對象創(chuàng)建其他對象的控制權(quán)收到自己手中,當對象需要引用其他對象時,不需要我們new,IOC容器會為你創(chuàng)建,即將對象新建的控制拿在手里。
②所謂new對象是屬于主動的行為,那么被動的獲取對象就屬于被動行為,從我們自己主動創(chuàng)建依賴對象到由容器控制創(chuàng)建以及注入依賴對象,就是一種反轉(zhuǎn)。
下面圖片很好的反應(yīng)了這個過程:
當引入IOC容器后,用戶不需要去創(chuàng)建這些類:
知道IOC原理以后,我們需要知道Spring 的IOC帶給我們怎么樣的變化:
實現(xiàn)組件之間的解耦,提高程序的靈活性和可維護性。
但是同時:
1、創(chuàng)建對象的步驟變復(fù)雜了,不直觀,當然這是對不習(xí)慣這種方式的人來說的。
2、因為使用反射來創(chuàng)建對象,所以在效率上會有些損耗。但相對于程序的靈活性和可維護性來說,這點損耗是微不足道的。
3、缺少IDE重構(gòu)的支持,如果修改了類名,還需到XML文件中手動修改,這似乎是所有XML方式的缺憾所在。
其次,我們來說一下“依賴注入”(DI)。
依賴注入其實與控制反轉(zhuǎn)是從不同角度來說明IOC概念,兩個對象之間的依賴關(guān)系在程序運行時由外部容器動態(tài)的注入依賴行為方式稱為依賴注入 (DI) 。
①如果類A需要運用類B的方法或者屬性,通俗的說他們之前存在依賴關(guān)系。
②當A運行時,IOC容器會將類B注入到A中,A不需要知道B什么時候創(chuàng)建以及怎么構(gòu)造的。
對于IOC,我們只要明白"控制反轉(zhuǎn)"以及"依賴注入"中的每個字的含義就行了,它代表的只是一種設(shè)計原理,并非那么高深。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
本文標題:Spring3.0第二講:什么是IOC-創(chuàng)新互聯(lián)
分享地址:http://chinadenli.net/article14/deisge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、營銷型網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)、域名注冊、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)