1 、IOC
Spring IOC:首先想到的是「依賴注入」「控制反轉(zhuǎn)」。Spring IOC 解決的是對象管理和對象依賴的問題。本來我們的對象都是new出來的,而我們?nèi)绻褂肧pring 則把對象交給「IOC容器」來管理。
「IOC容器」是什么?我們可以理解為是一個「工廠」,我們把對象都交由這個「工廠」來管理,包括對象的創(chuàng)建和對象之間的依賴關(guān)系等等。等我們要用到對象的時候,就從這個「工廠」里邊取出來。
「控制反轉(zhuǎn)」指的就是:本來是「由我們自己」new出來的對象,現(xiàn)在交給了IOC容器,「控制反轉(zhuǎn)」更多的是一種思想或者說是設(shè)計模式,把原有由自己掌控的事交給「別人」來處理。
「依賴注入」更多指的是「控制反轉(zhuǎn)」這個思想的實現(xiàn)方式:對象無需自行創(chuàng)建或管理它們的依賴關(guān)系,依賴關(guān)系將被「自動注入」到需要它們的對象當中去。
最簡單理解「依賴注入」和「控制反轉(zhuǎn)」:本來我們的對象都是「由我們自己」new出來的,現(xiàn)在我們把這個對象的創(chuàng)建權(quán)限和對象之間的依賴關(guān)系交由「IOC容器」來管理。
我們在使用Spring的時候,首先我們要學(xué)習(xí)的就是怎么把對象交給「IOC容器管理」
Spring提供了四種方式:
1.注解
2.XML
3.JavaConfig
4.基于Groovy DSL配置
總的來說:我們以XML配置+注解來裝配Bean比較多,其中注解這種方式占大部分
舉個例子:日常開發(fā)中,我們很多時候用@Component注解標識將對象放到「IOC容器」中,用@Autowired注解將對象注入

下面這張圖就很好總結(jié)了以各種方式來對Bean的定義和注入。


Spring AOP
Spring AOP主要做的事情就是:「把重復(fù)的代碼抽取,在運行的時候往業(yè)務(wù)方法上動態(tài)植入“切面類代碼”」
我們想要「消滅」掉重復(fù)代碼,可以怎么做?這個時候我們應(yīng)該能想到「動態(tài)代理」,通過動態(tài)代理,將非業(yè)務(wù)代碼寫在要「增強」的邏輯上。

完了以后,我們就可以通過「代理對象」去調(diào)用方法,最終屏蔽掉「重復(fù)代碼」

最終效果:

上面是我們手動寫的代理來實現(xiàn)對「非業(yè)務(wù)代碼」的抽取,類似這樣的場景會有很多:比如我們要做權(quán)限控制,要對參數(shù)進行校驗等等。Spring 支持了AOP,讓我們可以不用自己「手動」去寫代理對象,達到將「非業(yè)務(wù)代碼」的抽取的效果。我們可以體驗一波Spring AOP是怎么弄的,跟上面的對比對比:
