AOP是很多直覺難以理解的術語的根源。幸運的是,你只要理解三個概念,就可以編寫AOP模塊。這三個概念是:advice,pointcut和 advisor。advice是你想向別的程序內部不同的地方注入的代碼。pointcut定義了需要注入advice的位置,通常是某個特定的類的一個 public方法。advisor是pointcut和advice的裝配器,是將advice注入主程序中預定義位置的代碼。
關注點(Concern):
關注點也就是我們要考察或解決的問題.
核心關注點:是指一個系統中的核心功能,也就是一個系統中跟特定業務需求聯系最緊密的商業邏輯.
橫切關注點<交叉關注點>:分散在每個模塊中解決同一樣的問題的關注點.
切面(Aspect):
切面是關注點的模塊化,關注點可能橫切多個對象。它除了包括屬性、方法以外,同時還包括切入點Pointcut、增強Advice等,另外,切面中還可以給一個現存的類添加屬性、構造函數,指定一個類實現某一個接口、繼承某一個類等。
連接點(Join point):
連接點也就是運用程序執行過程中需要插入切面模塊的某一點.連接點主要強調的是一個具體的"點"概念.這個點可以是一個方法、一個屬性、構造函數、類靜態初始化塊,甚至一條語句。
切入點(Pointcuts):
切入點指一個或多個連接點,可以理解成一個點的集合。
切面:
關注點的模塊化,關注點可能橫切多個對象.
增強或通知(Advice):
增強(Advice)里面定義了切面中的實際邏輯(即實現),比如日志的寫入的實際代碼,或是安全檢查的實際代碼。或者說:增強(Advice)是指在定義好的切入點處,所要執行的程序代碼。
一般情況下增強(通知)主要有前增強、后增強、環繞增強三種基本類型。
前增強(Before advice):是指在連接點之前,先執行增強中的代碼 。
后增強(After advice):是指在連接點執行后,再執行增強中的代碼。后增強一般分為連接點正常返回增強及連接點異常返回增強等類型。
環繞增強(Around advice):是一種功能強大的增強,可以自由改變程序的流程,連接點返回值等。在環繞增強中出除了可以自由添加需要的橫切功能以外,還需要負責主動調用連接點(通過proceed)來執行激活連接點的程序。
引介(Introduction):
引介是指給一個現有的類添加方法或字段屬性,引介還可以在不改變現有類代碼的情況下,讓現有的Java類實現新的接口,或者為其指定一個父類從而實現多重繼承。相對于增強(Advice)可以動態改變程序的功能或流程來說,引介(Introduction)則用來改變一個類的靜態結構。
織入(Weaving):
織入是指把解決橫切問題的切面模板,與系統中的其它核心模塊通過一定策略或規則組合到一起的過程。在Java領域,主要包括以下三種織入方式:
1、運行時織入:即在JAVA運行的過程中,使用JAVA提供代理來實現織入。根據代理產生方式的不同,運行時織入又可以進一步分為2SE動態代理及動態字節碼生成兩種方式。由于J2SE動態代理只能代理接口,因此,需要借助于一些動態字節碼生成器來實現對類的動態代理。大多數AOP實現都是采用這種運行時織入的方式。
2、類加載器織入:指通過自定義的類加載器,在虛擬機JVM加載字節碼的時候進行織入。
3、編譯器織入:使用專門的編譯器來編譯包括切面模塊在內的整個應用程序,在編譯的過程中實現織入,這種織入是功能最強大的。
攔截器(Interceptor):
攔截器是用來實現對連接點進行攔截,從而在連接點前或后加入自定義的切面模塊功能。
目標對象(Target object):
指在基于攔載器機制實現的AOP框架中,位于攔截器鏈上最未端的對象實例。一般情況下,攔截器未端都包含一個目標對象,通常也就實際業務對象。當然,也可以不使用目標對象,直接把多個切面模塊組織到一起,形成一個完整最終應用程序,整個系統完全使用基于AOP編程方法實現,這種情況少見。
AOP代理(Proxy):
AOP代理是指在基于攔截器機制實現的AOP框架中,實際業務對象的代理對象。這個代理對象一般衩切面模塊引用,AOP的切面邏輯正是插入在代理對象中來執行的。AOP代理的包括J2SE的代理以及其它字節碼生成工具生成的代理兩種類型。
面向對象編程(OOP)解決問題的重點在于對具體領域模型的抽象,而面向切面編程(AOP)解決問題的關鍵則在于對關注點的抽象。
Spring-AOP:使用基于代理及攔截器的機制,與Spring IOC容器融入一體的AOP框架.Spring AOP采用運行時 織入方式,使得可以在基于
Sping框架的應用程序中使用各種聲明式系統級服務.