Posted on 2008-09-03 13:23
tangtb 閱讀(1692)
評論(0) 編輯 收藏 所屬分類:
Spring
-
切面(Aspect):一個關(guān)注點的模塊化,這個關(guān)注點可能會橫切多個對象。事務(wù)管理是J2EE應(yīng)用中一個關(guān)于橫切關(guān)注點的很好的例子。在Spring
AOP中,切面可以使用基于模式)或者基于@Aspect注解的方式來實現(xiàn)。
-
連接點(Joinpoint):在程序執(zhí)行過程中某個特定的點,比如某方法調(diào)用的時候或者處理異常的時候。在Spring
AOP中,一個連接點總是表示一個方法的執(zhí)行。
-
通知(Advice):在切面的某個特定的連接點上執(zhí)行的動作。其中包括了“around”、“before”和“after”等不同類型的通知(通知的類型將在后面部分進(jìn)行討論)。許多AOP框架(包括Spring)都是以攔截器做通知模型,并維護(hù)一個以連接點為中心的攔截器鏈。
-
切入點(Pointcut):匹配連接點的斷言。通知和一個切入點表達(dá)式關(guān)聯(lián),并在滿足這個切入點的連接點上運行(例如,當(dāng)執(zhí)行某個特定名稱的方法時)。切入點表達(dá)式如何和連接點匹配是AOP的核心:Spring缺省使用AspectJ切入點語法。
-
引入(Introduction):用來給一個類型聲明額外的方法或?qū)傩裕ㄒ脖环Q為連接類型聲明(inter-type
declaration))。Spring允許引入新的接口(以及一個對應(yīng)的實現(xiàn))到任何被代理的對象。例如,你可以使用引入來使一個bean實現(xiàn)IsModified
接口,以便簡化緩存機(jī)制。
-
目標(biāo)對象(Target Object):
被一個或者多個切面所通知的對象。也被稱做被通知(advised)對象。
既然Spring AOP是通過運行時代理實現(xiàn)的,這個對象永遠(yuǎn)是一個被代理(proxied)對象。
-
AOP代理(AOP
Proxy):AOP框架創(chuàng)建的對象,用來實現(xiàn)切面契約(例如通知方法執(zhí)行等等)。在Spring中,AOP代理可以是JDK動態(tài)代理或者CGLIB代理。
-
織入(Weaving):把切面連接到其它的應(yīng)用程序類型或者對象上,并創(chuàng)建一個被通知的對象。這些可以在編譯時(例如使用AspectJ編譯器),類加載時和運行時完成。Spring和其他純Java
AOP框架一樣,在運行時完成織入。
通知類型:
-
前置通知(Before
advice):在某連接點之前執(zhí)行的通知,但這個通知不能阻止連接點之前的執(zhí)行流程(除非它拋出一個異常)。
-
后置通知(After returning
advice):在某連接點正常完成后執(zhí)行的通知:例如,一個方法沒有拋出任何異常,正常返回。
-
異常通知(After throwing
advice):在方法拋出異常退出時執(zhí)行的通知。
-
最終通知(After (finally)
advice):當(dāng)某連接點退出的時候執(zhí)行的通知(不論是正常返回還是異常退出)。
-
環(huán)繞通知(Around
Advice):包圍一個連接點的通知,如方法調(diào)用。這是最強(qiáng)大的一種通知類型。環(huán)繞通知可以在方法調(diào)用前后完成自定義的行為。它也會選擇是否繼續(xù)執(zhí)行連接點或直接返回它自己的返回值或拋出異常來結(jié)束執(zhí)行。