IOC:Inversion of Control策严,即“控制反轉(zhuǎn)”
DI:Dependency Injection西篓,即“依賴注入”
參考文檔:
原始吃雞流程
假如自己是個吃雞隊員祥山,要上線打仗赵哲,本來什么都沒有需频,所以就自己去尋找武器漓帅,彈藥,醫(yī)療箱炕泳,食物等纵诞,這些依賴品都需要我們自己來一一去尋找并和他們進(jìn)行組合,也就是所謂的我們只有依賴于這些對象喊崖,控制這些對象挣磨,和他們進(jìn)行組合之后才能達(dá)到我們吃雞的目的雇逞,于是N多個吃雞隊員都要去尋找自己的依賴對象來達(dá)到不同的目的荤懂。
改良后的吃雞流程
后面陸戰(zhàn)隊的領(lǐng)導(dǎo)成立了后勤部門,部門名字為IOC容器塘砸,后勤部門說了节仿,我這邊什么都有,你們不要自己去找資源了掉蔬,想要啥問我要廊宪,于是吃雞隊員就按照自己不同的依賴需求直接伸手去拿,并且拿來即用女轿,再也不用費勁兒去找了箭启。
改良前后對比分析
改良之后,吃雞隊員動手拿資源的過程蛉迹,并不是自己主動去拿傅寡,而是后勤部門(IOC容器)會在你執(zhí)行作戰(zhàn)任務(wù)的時候(程序運行時)動態(tài)的識別你需要什么并送到你手上(依賴注入-DI),關(guān)于依賴注入是有兩種方式的北救,一種是你想要什么就問后勤部門要什么荐操,另外一個就是被動的讓后勤部門給你發(fā)放,也就是所謂的主動注入和被動注入珍策。
那么托启,現(xiàn)在對象獲取的控制權(quán)不在你的手上,而是在后勤部門手上(IOC容器)攘宙,也就是所謂的控制反轉(zhuǎn)(IOC)屯耸,但是后勤部門本身也有發(fā)錯裝備的時候拐迁,那么吃雞隊員就會打call給后勤部門投訴(程序啟動的時候報錯)。
為什么要成立后勤部門
之前每個吃雞隊員要去尋找裝備肩民,費時費力唠亚,并且資源浪費。
? ? 費時費力: 每次都要去自己找資源持痰,可能會引起資源沖突灶搜,比如張三和李四花了一個小時都去找資源發(fā)現(xiàn)了同一個沙漠之鷹,但是只能一個人拿去用工窍。
? ? 資源浪費:張三手上有個AK47割卖,但是一直不用,李四手上只有一個木棍患雏,AK47找了一天都沒找到鹏溯,后來被KO了~??。
成立后勤部門后統(tǒng)一調(diào)配資源淹仑,省時省力丙挽,實現(xiàn)了資源優(yōu)化配置。
? ? 省時省力: 不用跑腿匀借,不用去撿裝備颜阐,在合適的時間后勤部會給你合適的裝備。
? ? ? ? 關(guān)于“合適的時間”:默認(rèn)情況下吓肋,在程序編譯時凳怨,準(zhǔn)確的說是在SpringBoot啟動時,IOC容器會自動創(chuàng)建對象是鬼,并且注入到我們的代碼片段里肤舞;但是我們可以更改默認(rèn)機制,來延遲實例化:就是在使用方和被使用方都加上@Lazy注解均蜜。
? ? 資源優(yōu)化配置:
????????張三手上有個AK47李剖,但是一直不用這種情況不存在了,因為只有張三使用的時候才會發(fā)給他囤耳,不用的時候就進(jìn)行回收(對象的創(chuàng)建篙顺,回收,分配紫皇,再利用)從而提高資源的復(fù)用率慰安。 一個對象創(chuàng)建/回收的典型例子就是@Conditional條件注解,比如AK47他的損壞程度達(dá)到了60%聪铺, 那么可以通過條件注解來決定當(dāng)損壞率達(dá)到60%的時候不讓AK47進(jìn)入后勤部門待發(fā)放倉庫中(IOC容器)化焕;另外也可以通過優(yōu)先級注解@Primary來決定,當(dāng)有AK47铃剔,AK48等等的時候撒桨,如果AK47這個Bean被打上了@Primary注解查刻,那么就會優(yōu)先被放置到IOC容器。注意凤类,這里的條件注解和優(yōu)先級注解是針對放入容器的穗泵,而不是容器注入,所以注解是使用在AK47這個被放入容器的Bean的位置谜疤。那么對于李四來說佃延,就不會拿到一個不能用的AK47了,而且可以根據(jù)優(yōu)先級設(shè)定來拿到相對更好用的武器裝備夷磕。
????=>在這里我們的關(guān)注點是AK47這個類履肃,當(dāng)你想換個裝備或者在某個前提條件下替換裝備時(當(dāng)某個類的需求發(fā)生變化的時候)我們可以分別通過@Primary和@Conditional來進(jìn)行對應(yīng)的處理。
? ? 當(dāng)張三想替換所有的裝備坐桩,槍尺棋,頭盔,鞋子绵跷,醫(yī)療箱膘螟,坦克,大炮碾局,飛機等等荆残,也就是涉及到大量的裝備的自動裝配問題,我們需要靈活的替換所有這些裝備擦俐,那就需要SPI的機制進(jìn)行處理脊阴。SPI全稱:Service Provider Interface握侧,基于Interface + 策略模式+ 配置文件蚯瞧, Interface和策略模式解決了張三/李四的槍的問題,但是沒有解決其他裝備的問題品擎,那么通過配置文件就可以靈活的進(jìn)行裝備的批量裝配問題(將配置批量導(dǎo)入到IOC容器以及注入的問題)埋合,關(guān)于這個問題請參考:自動裝配
最后祝大家吃雞愉快~