當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单
生活随笔
收集整理的這篇文章主要介紹了
ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 很多小伙伴們看到標(biāo)題可能就會(huì)想到拋開Spring就不會(huì)存在IOC思想了,其實(shí)不然在接下來的文章中就會(huì)講述到。
- 很多小伙伴在理解IOC的時(shí)候通常會(huì)和Spring放到一起去學(xué)習(xí),首先呢Spring設(shè)計(jì)的非常之巧妙而且里面包含了很多除去IOC的其他功能。這樣會(huì)導(dǎo)致我們?cè)赟pring的基礎(chǔ)去理解IOC就變得很困難。很難抓住其核心思想。
- 所以本文的標(biāo)題的含義就是單純的去理解IOC思想,然后通過自定義的IOC去加深對(duì)IOC的理解。
- 看完本文之后再去理解Spring中的IOC其實(shí)思想是一致的,只是實(shí)現(xiàn)上有些出入。畢竟Spring是大神們經(jīng)過深思熟慮后的成果。
傳統(tǒng)的思想(沒有IOC容器的情況下)
在沒有IOC容器的情況下,如果我們需要某個(gè)類具體的操作如下所示:
傳統(tǒng)的Bean創(chuàng)建
優(yōu)點(diǎn)
- 很直接的一個(gè)優(yōu)點(diǎn)就是簡(jiǎn)單,我們需要什么就去創(chuàng)建什么,在程序員的角度上也是比較直觀容易理解的。
缺點(diǎn)
- Bean之間的協(xié)調(diào)關(guān)系是由程序內(nèi)部代碼來控制的即通過New關(guān)鍵字與我們的業(yè)務(wù)代碼進(jìn)行了強(qiáng)耦合。
- 沒有對(duì)Bean進(jìn)行管理。
- 對(duì)Bean沒有進(jìn)行統(tǒng)一的管理和配置。
IOC思想
首先在這里強(qiáng)調(diào)一下IOC不是Spring提出來了,在Spring之前就已經(jīng)有人提出了IOC思想,只不過在Spring之前都是偏理論化沒有一個(gè)具體的落地方案,Spring在技術(shù)層面把IOC思想體現(xiàn)的淋漓盡致。
什么是IOC(Inversion of controller)
- IOC是一種思想,而不是一個(gè)技術(shù)的實(shí)現(xiàn)。
- 主要的描述是在軟件開發(fā)的領(lǐng)域?qū)ο蟮膭?chuàng)建和管理的問題。
- 上述我們了解了傳統(tǒng)的開發(fā)模式,我們?cè)趤砜纯慈绻蠭OC的思想下程序員是如何使用對(duì)象的。
從上圖可知:
- 程序員只需要告訴IOC自己需要那個(gè)Bean。就不需要關(guān)系該Bean創(chuàng)建的細(xì)節(jié)已經(jīng)該Bean的相關(guān)依賴。這一切IOC容器已經(jīng)幫你做好了。
- 凡事有得必有失: 這個(gè)過程中我們失去了創(chuàng)建Bean的權(quán)利。
- 了解了基本的使用后,有人說IOC就是控制反轉(zhuǎn),講到這里你還沒將控制反轉(zhuǎn)?好!別急接下來就是細(xì)講我們常說的控制反轉(zhuǎn)。
控制反轉(zhuǎn)
在理解控制反轉(zhuǎn)之前我們首先要清楚控制是指什么? 反轉(zhuǎn)又反轉(zhuǎn)了什么?
- 控制: 指的就是我們上述說的我們失去的權(quán)利(創(chuàng)建對(duì)象的創(chuàng)建,或者說控制對(duì)象的權(quán)利)
- 反轉(zhuǎn): 指的是控制權(quán)的轉(zhuǎn)變。在沒有IOC的容器上我們程序員想創(chuàng)建誰就創(chuàng)建誰的權(quán)利。在IOC容器下程序員就只能委屈巴巴的向IOC容器索取對(duì)象。創(chuàng)建對(duì)象的權(quán)利由程序員到IOC容器手里了。
IOC解決了什么問題?
- 其實(shí)就是解決了對(duì)象之間的耦合問題。
- 我們不需要在通過New關(guān)鍵字來創(chuàng)建對(duì)象,而是從容器中獲取達(dá)到一種松耦合的目的。
- 同時(shí)IOC容器也方便管理容器內(nèi)的所有Bean對(duì)象。所謂的Bean的生命周期。
IOC和DI的區(qū)別
將到IOC肯定會(huì)有人想到DI(Dependancy Injection)依賴注入,那這兩者有什么不同和相同呢?
相同點(diǎn)
- IOC和DI描述的都是同一件事情(對(duì)象的實(shí)例化以及維護(hù)對(duì)象與對(duì)象已經(jīng)的依賴關(guān)系)
不同點(diǎn)
- 首先IOC是一種思想,而DI是一種具體的技術(shù)實(shí)現(xiàn)手段。
- IOC是站著對(duì)象的角度上對(duì)象的實(shí)例化以及管理從程序員的手里交給了IOC容器
- DI是站著容器的角度的上會(huì)把對(duì)象的依賴的其他對(duì)象注入到容器中,上述案例中的A類依賴B類IOC容器不僅僅將A類放到容器中還需要將其依賴的B類也一并加載到IOC容器中。
如何自定義實(shí)現(xiàn)一個(gè)IOC容器
- 小伙伴們看到這里其實(shí)對(duì)IOC容器已經(jīng)有了一定的了解。那如果在面試的過程中面試官問你如何實(shí)現(xiàn)一個(gè)自定義的IOC容器。你可以講出的具體思路嘛? 可以先想一想在繼續(xù)往下看,看看是不是和自己的想發(fā)不謀而合。
- 思路大致如下所示:
- 想必大家都有自己的一定的理解,可能做法比較簡(jiǎn)單,但是對(duì)于理解IOC容器而已其實(shí)已經(jīng)足夠了。如果想更加準(zhǔn)確或者深入了解其底層實(shí)現(xiàn),可以按照這個(gè)思路去看Spring的相關(guān)源碼實(shí)現(xiàn),相信你一定會(huì)得心應(yīng)手。
小案例
- 我們通過一個(gè)小案例來寫我們的IOC容器
- 我們經(jīng)常購(gòu)物,我們可以把購(gòu)物簡(jiǎn)單的理解成下單和減庫(kù)存兩個(gè)操作。
- 有同學(xué)會(huì)問為什么要寫這個(gè)案例啊,不僅為了我們能夠理解IOC容器也為了我們后續(xù)的文章將AOP和AOP的經(jīng)典實(shí)現(xiàn)事務(wù)控制鋪墊的。
Coding
- 首先整體的代碼結(jié)構(gòu)很簡(jiǎn)單,在這里也說明一下
- Bean的配置文件
- 創(chuàng)建Bean對(duì)象”工廠“進(jìn)行創(chuàng)建
- 主要就是讀取xml,通過set方法傳值。
- 業(yè)務(wù)代碼
- 啟動(dòng)
- 測(cè)試
- 地址: http://localhost:9080/order?userId=857&name=ipone
- 配圖:
項(xiàng)目地址
- 項(xiàng)目地址
- 有幫忙到你記得點(diǎn)個(gè)小星星哦。
總結(jié)
- 本人水平有限有什么不正確的地方,歡迎大家留言區(qū)討論。
總結(jié)
以上是生活随笔為你收集整理的ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cross_val_score 如何对孤
- 下一篇: python动态映射_Python Dj