如何理解Spring中的IOC和AOP

java後端技術發表於2019-04-01

我們是在使用Spring框架的過程中,其實就是為了使用IOC,依賴注入和AOP,面向切面程式設計,這兩個是Spring的靈魂。

主要用到的設計模式有工廠模式和代理模式

IOC就是典型的工廠模式,通過sessionfactory去注入例項

AOP就是典型的代理模式的體現。

代理模式是常用的java設計模式,他的特徵是代理類與委託類有同樣的介面,代理類主要負責為委託類預處理訊息、過濾訊息、把訊息轉發給委託類,以及事後處理訊息等。代理類與委託類之間通常會存在關聯關係,一個代理類的物件與一個委託類的物件關聯,代理類的物件本身並不真正實現服務,而是通過呼叫委託類的物件的相關方法,來提供特定的服務。

spring的IoC容器是spring的核心spring AOP是spring框架的重要組成部分。

在傳統的程式設計中,當呼叫者需要被呼叫者的協助時,通常由呼叫者來建立被呼叫者的例項。但在spring裡建立被呼叫者的工作不再由呼叫者來完成,因此控制反轉(IoC);建立被呼叫者例項的工作通常由spring容器來完成,然後注入呼叫者,因此也被稱為依賴注入(DI),依賴注入和控制反轉是同一個概念。

面向方面程式設計(AOP)是以另一個角度來考慮程式結構,通過分析程式結構的關注點來完善物件導向程式設計(OOP)。OOP將應用程式分解成各個層次的物件,而AOP將程式分解成多個切面。spring AOP 只實現了方法級別的連線點,在J2EE應用中,AOP攔截到方法級別的操作就已經足夠。在spring中,未來使IoC方便地使用健壯、靈活的企業服務,需要利用spring AOP實現為IoC和企業服務之間建立聯絡。

IOC:控制反轉也叫依賴注入。利用了工廠模式

將物件交給容器管理,你只需要在spring配置檔案總配置相應的bean,以及設定相關的屬性,讓spring容器來生成類的例項物件以及管理物件。在spring容器啟動的時候,spring會把你在配置檔案中配置的bean都初始化好,然後在你需要呼叫的時候,就把它已經初始化好的那些bean分配給你需要呼叫這些bean的類(假設這個類名是A),分配的方法就是呼叫A的setter方法來注入,而不需要你在A裡面new這些bean了。注意:面試的時候,如果有條件,畫圖,這樣更加顯得你懂了.

AOP:面向切面程式設計。(Aspect-Oriented Programming)

AOP可以說是對OOP的補充和完善。OOP引入封裝、繼承和多型性等概念來建立一種物件層次結構,用以模擬公共行為的一個集合。當我們需要為分散的物件引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關係,但並不適合定義從左到右的關係。例如日誌功能。日誌程式碼往往水平地散佈在所有物件層次中,而與它所散佈到的物件的核心功能毫無關係。在OOP設計中,它導致了大量程式碼的重複,而不利於各個模組的重用。

將程式中的交叉業務邏輯(比如安全,日誌,事務等),封裝成一個切面,然後注入到目標物件(具體業務邏輯)中去。

實現AOP的技術,主要分為兩大類:一是採用動態代理技術,利用擷取訊息的方式,對該訊息進行裝飾,以取代原有物件行為的執行;二是採用靜態織入的方式,引入特定的語法建立“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的程式碼.

簡單點解釋,比方說你想在你的biz層所有類中都加上一個列印‘你好’的功能,這時就可以用aop思想來做.你先寫個類寫個類方法,方法經實現列印‘你好’,然後Ioc這個類 ref=“biz.*”讓每個類都注入即可實現。

spring 的優點?

1.降低了元件之間的耦合性 ,實現了軟體各層之間的解耦

2.可以使用容易提供的眾多服務,如事務管理,訊息服務等

3.容器提供單例模式支援

4.容器提供了AOP技術,利用它很容易實現如許可權攔截,執行期監控等功能

5.容器提供了眾多的輔助類,能加快應用的開發

6.spring對於主流的應用框架提供了整合支援,如hibernate,JPA,Struts等

7.spring屬於低侵入式設計,程式碼的汙染極低

8.獨立於各種應用伺服器

9.spring的DI機制降低了業務物件替換的複雜性

10.Spring的高度開放性,並不強制應用完全依賴於Spring,開發者可以自由選擇spring的部分或全部

什麼是DI機制?

依賴注入(Dependecy Injection)和控制反轉(Inversion of Control)是同一個概念,具體的講:當某個角色

需要另外一個角色協助的時候,在傳統的程式設計過程中,通常由呼叫者來建立被呼叫者的例項。但在spring中

建立被呼叫者的工作不再由呼叫者來完成,因此稱為控制反轉。建立被呼叫者的工作由spring來完成,然後注入呼叫者

因此也稱為依賴注入。

spring以動態靈活的方式來管理物件 , 注入的兩種方式,設定注入和構造注入。

設定注入的優點:直觀,自然

構造注入的優點:可以在構造器中決定依賴關係的順序。

什麼是AOP?

面向切面程式設計(AOP)完善spring的依賴注入(DI),面向切面程式設計在spring中主要表現為兩個方面

1.面向切面程式設計提供宣告式事務管理

2.spring支援使用者自定義的切面

面向切面程式設計(aop)是對物件導向程式設計(oop)的補充:

物件導向程式設計將程式分解成各個層次的物件,面向切面程式設計將程式執行過程分解成各個切面。

AOP從程式執行角度考慮程式的結構,提取業務處理過程的切面,oop是靜態的抽象,aop是動態的抽象,

是對應用執行過程中的步驟進行抽象,,從而獲得步驟之間的邏輯劃分。

aop框架具有的兩個特徵:

1.各個步驟之間的良好隔離性

2.原始碼無關性

相關文章