AOP是Aspect Oriented Programming的簡寫,中文一般譯做面向方面編程,其核心內容就是所謂的「橫切關注點」。
咱們知道,使用面向對象方法構建軟件系統,咱們能夠利用OO的特性,很好的解決縱向的問題,由於,OO的核心概念,如繼承等,都是縱向結構的。可是,在軟件系統中,每每有不少模塊,或者不少類共享某個行爲,或者說,某個行爲存
在於軟件的各個部分中,這個行爲能夠看做是「橫向」存在於軟件之中,他所關注的是軟件的各個部分的一些共有的行爲,
並且,在不少狀況下,這種行爲不屬於業務邏輯的一部分。例如,操做日誌的記錄,這種操做並非業務邏輯調用的必須部
分,可是,咱們卻每每不得在代碼中顯式進行調用,並承擔由此帶來的後果(例如,當日志記錄的接口發生變化時,不得不
對調用代碼進行修改)。這種問題,使用傳統的OO方法是很難解決的。AOP的目標,即是要將這些「橫切關注點」與業務邏輯
代碼相分離,從而獲得更好的軟件結構以及性能、穩定性等方面的好處。
AOP包含如下主要概念:
Aspect方面:一個關注點的模塊化,這個關注點實現可能另外橫切多個對象。事務管理是J2EE應用中橫切關注點中一個很好的例子。
Joinpoint鏈接點:程序執行過程當中明確的點,如方法的調 用或特定的異常被拋出。
Advice通知:在特定的鏈接點AOP框架執行的動做。各類類型的通知包括「around」、「before」和「throws」通知。通知類型將在下面討論。許多AOP框架都是以攔截器作通知模型,維護一個「圍繞」鏈接點的攔截器鏈。
Pointcut切入點:指定一個通知將被引起的一系列鏈接點 的集合。AOP框架必須容許開發者指定切入點:例如,使用正則表達式。
Introduction引入:添加方法或字段到通知化類。
IsModified接口,來簡化緩存。
Target object目標對象:包含鏈接點的對象。也被用來 引用通知化或代理化對象。
AOP proxy AOP代理: AOP框架建立的對象,包含通知。
Weaving織入:組裝方面建立通知化對象。這能夠在編譯時完成(例如使用AspectJ編譯器),也能夠在運行時完成。Spring和其餘一些純Java AOP框架, 使用運行時織入。
各類通知類型包括:
Around通知: 包圍一個鏈接點的通知,如方法調用。這是最 強大的通知。Aroud通知在方法調用先後完成自定義的行爲。它們負責選擇繼續執行鏈接點或直接返回它們本身的返回值或拋出異常來短路執行。
Before通知: 在一個鏈接點以前執行的通知,但這個通知 不能阻止流程繼續執行到鏈接點(除非它拋出一個異常)。
Throws通知: 在方法拋出異常時執行的通知。
After returning通知: 在鏈接點正常完成後執行的通知, 例如,若是一個方法正常返回,沒有拋出異常。
Around通知是最通用的通知類型。大部分基於攔截器的AOP框架如Nanning和JBoss4只提供 Around通知。
AOP,給咱們的軟件設計帶來了一個新的視角和軟件架構方法。使用AOP,咱們能夠專一於業務邏輯代碼的編寫,而將諸如日誌記錄、安全檢測等系統功能交由AOP框架,在運行時刻自動耦合進來。
一般,咱們能夠在以下情景中使用AOP技術:
Authentication 權限
Caching 緩存
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 懶加載
Debugging 調試
logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
Performance optimization 性能優化
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務
Websharp實現了一個基於.Net的輕量級的AOP框架。正則表達式