1. 程式人生 > 實用技巧 >IOC與AOP

IOC與AOP

什麼是IOC

ioc(Inversion of control)控制反轉/反轉控制。是一種思想,不是一個技術實現。描述的是:Java開發領域物件的建立即管理的問題

傳統開發方式:在一個類中,通過new關鍵字來將另一個類new出來

使用ioc方式:不通過new關鍵字,而是通過ioc容器(Spring框架)來例項化物件

什麼是控制反轉

控制:指的是物件建立(例項化,管理)的權利

反轉:控制器交給外部環境(Spring框架、ioc容器)

Ioc解決了什麼問題

降低了物件之間的耦合度(依賴程度)

資源變得容易管理

ioc容器是Spring用來實現ioc的載體,ioc實際上就是個Map(key,value),Map中存放的是各種物件

ioc最常見及最合理的實現方式叫依賴注入(Dependency In jection,簡稱DI)。

什麼是AOP

AOP:(Aspect oriented programming)面向切面程式設計,AOP是OOP的一種延續。OOP引入封裝、繼承和多型性等概念來建立一種物件層次結構,用以模擬公共行為的一個集合。當我們需要為分散的物件引入公共行為的時候,
        OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關係,但並不適合定義從左到右的關係。例如日誌功能。日誌程式碼往往水平地散佈在所有物件層次中,而與它所散佈到的物件的核心功能毫無關係。對於其他型別的程式碼,
        如安全性、異常處理和透明的持續性也是如此。這種散佈在各處的無關的程式碼被稱為橫切(cross-cutting)程式碼,在OOP設計中,它導致了大量程式碼的重複,而不利於各個模組的重用。

AOP技術則恰恰相反,它利用一種稱為“橫切”的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到一個可重用模組,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。

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

  1、join point(連線點):是程式執行中的一個精確執行點,例如類中的一個方法。它是一個抽象的概念,在實現AOP時,並不需要去定義一個join point。
  2、point cut(切入點):本質上是一個捕獲連線點的結構。在AOP中,可以定義一個point cut,來捕獲相關方法的呼叫。
  3、advice(通知):是point cut的執行程式碼,是執行“方面”的具體邏輯。
  4、aspect(方面):point cut和advice結合起來就是aspect,它類似於OOP中定義的一個類,但它代表的更多是物件間橫向的關係。
  5、introduce(引入):為物件引入附加的方法或屬性,從而達到修改物件結構的目的。有的AOP工具又將其稱為mixin。

AOP解決了什麼問題

在不改變原有業務邏輯的情況下,增強橫切邏輯程式碼,根本上解耦合,避免橫切邏輯程式碼重複。