第二部分 Spring核心思想

注意:IOC和AOP不是spring提出的,在Spring之前就已經(jīng)存在,只不過更偏向于理論化,Spring只是在技術(shù)層次把這兩個(gè)思想做了?常好的實(shí)現(xiàn)(基于Java語言)

一、IOC(Inversion of Control)控制反轉(zhuǎn)

1、什么是IOC?

IOC Inversion of Control (控制反轉(zhuǎn)/反轉(zhuǎn)控制),注意它是?個(gè)技術(shù)思想,不是?個(gè)技術(shù)實(shí)現(xiàn)
描述的事情:Java開發(fā)領(lǐng)域?qū)ο蟮膭?chuàng)建,管理的問題

  • 傳統(tǒng)的開發(fā)方式:?如類A依賴于類B,往往會(huì)在類A中new?個(gè)B的對(duì)象


    image.png
  • 基于IOC思想下的開發(fā)方式:不再具體的類中去new一個(gè)對(duì)象,面是由Spring框架中的IOC容器去幫助我們實(shí)例化對(duì)象并且管理它們,當(dāng)需要使用到具體的哪一個(gè)對(duì)象的時(shí)候,直接從容器中獲取出來使用即可
image.png

在此過程我們喪失了?個(gè)權(quán)利(創(chuàng)建、管理對(duì)象的權(quán)利),得到了?個(gè)福利(不?考慮對(duì)象的創(chuàng)建、管理等?系列事情,全部交由IOC容器進(jìn)行管理)

為什么叫控制反轉(zhuǎn)?
控制:指的是對(duì)象創(chuàng)建(實(shí)例化、管理)的權(quán)利
反轉(zhuǎn):控制權(quán)交給外部環(huán)境了(Spring框架、IOC容器)
將需要人為控制進(jìn)行對(duì)象創(chuàng)建和管理的工作交由Spring框架進(jìn)行管理控制

2、 IOC解決了什么問題

IOC主要解決對(duì)象之間的耦合問題

IoC解決對(duì)象耦合問題.png

如上圖,如果我們在Service層調(diào)用 Dao層的接口,通過new 關(guān)鍵字進(jìn)行依賴關(guān)系維護(hù),那么如果Dao層換了一個(gè)新的實(shí)現(xiàn)類,那么所有引用到這個(gè)Dao的地方都要進(jìn)行修改,如果使用IOC容器,直接通過申明接口類型,然后在容器啟動(dòng)時(shí)根據(jù)配置或注解進(jìn)行初始化,一定程度上減少了對(duì)象之間的依賴關(guān)系

3、 IOC和DI的區(qū)別
  • DI:Dependancy Injection(依賴注?)
  • IOC和DI所說的是同一件事情(對(duì)象實(shí)體化及依賴關(guān)系維護(hù)管理這件事情),只不過角度不同
  • IOC是站在對(duì)象的角度,對(duì)象實(shí)例化及其管理的權(quán)利交給了容器進(jìn)行處理
  • DI是站在容器的角度,容器實(shí)例化對(duì)象的過程中,會(huì)把對(duì)象依賴的其它對(duì)象注入到其中,維護(hù)對(duì)象之間的依賴關(guān)系,比如A對(duì)象實(shí)例化過程中因?yàn)槁暶髁艘粋€(gè)B類型的屬性,那個(gè)容器會(huì)把B注入到A中


    image.png

二、AOP ( Aspect oriented Programming)?向切?編程/?向??編程

1、什么是AOP?
  • AOP:Aspect oriented Programming ?向切?編程/?向??編程
  • AOP是OOP(Object Oriented Programming)的延續(xù),從OOP說起
  • OOP三?特征:封裝、繼承和多態(tài)
  • oop是?種垂直繼承體系


    image.png

OOP編程思想通過繼承方式可以解決?多數(shù)的代碼重復(fù)問題,但是有?些情況是處理不了的,?如下?的在頂級(jí)?類Animal中的多個(gè)?法中相同位置出現(xiàn)了重復(fù)代碼,OOP就解決不了


image.png

橫切邏輯代碼


image.png

橫切邏輯代碼存在的問題:

  • 橫切代碼大量重復(fù)
  • 橫切邏輯代碼和業(yè)務(wù)代碼混雜在?起,代碼臃腫,維護(hù)不?便

由于存在這些問題,AOP出場,AOP獨(dú)辟蹊徑提出橫向抽取機(jī)制,將橫切邏輯代碼和業(yè)務(wù)邏輯代碼分離


image.png

代碼拆分容易,那么如何在不改變原有業(yè)務(wù)邏輯的情況下,悄?聲息的把橫切邏輯代碼應(yīng)?到原有的業(yè)務(wù)邏輯中,達(dá)到和原來?樣的效果,這個(gè)是?較難的

2、AOP在解決什么問

在不改變原有業(yè)務(wù)邏輯情況下,增強(qiáng)橫切邏輯代碼,根本上解耦合,避免橫切邏輯代碼重復(fù)

3、為什么叫做?向切?編程

「切」:指的是橫切邏輯,原有業(yè)務(wù)邏輯代碼我們不能動(dòng),只能操作橫切邏輯代碼,所以?向橫切邏輯
「?」:橫切邏輯代碼往往要影響的是很多個(gè)?法,每?個(gè)?法都如同?個(gè)點(diǎn),多個(gè)點(diǎn)構(gòu)成?

對(duì)應(yīng)演示代碼下載地址:https://gitee.com/happymima/java-study-spring-project.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容