1.Spring AOP中的基本概念 連接點(Joinpoint):在程式執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。在Spring AOP中,一個連接點總是表示一個方法的執行。 通俗的講: 層與層之間調用的過程中,目標層中可供調用的方法,就稱之為連接點。 切入點(Pointcu ...
1.Spring AOP中的基本概念
連接點(Joinpoint):在程式執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。在Spring AOP中,一個連接點總是表示一個方法的執行。
通俗的講:
層與層之間調用的過程中,目標層中可供調用的方法,就稱之為連接點。
切入點(Pointcut):匹配連接點的斷言。通知和一個切入點表達式關聯,併在滿足這個切入點的連接點上運行(例如,當執行某個特定名稱的方法時)。切入點表達式如何和連接點匹配是AOP的核心:Spring預設使用AspectJ切入點語法。
通俗的講:
在連接點的基礎上,增加了切入規則,選擇出需要進行增強的連接點,這些基於切入規則選出來的連接點就稱之為切入點。
切麵(Aspect):一個關註點的模塊化,這個關註點可能會橫切多個對象。事務管理是J2EE應用中一個關於橫切關註點的很好的例子。在Spring AOP中,切麵可以使用基於模式,或者基於@Aspect註解的方式來實現。
通俗的講:
狹義上就是,當Spring攔截下切入點後,將這些切入點交給處理類進行功能的增強,這個處理類就稱之為切麵。
廣義上來講,講Spring底層的代理切入點和處理類加在一起實現的對層與層之間調用過程進行增強的機制,稱之為切麵。
通知(Advice):在切麵的某個特定的連接點上執行的動作。其中包括了"around"、"before"和"after"等不同類型的通知(通知的類型在後面部分會討論)。許多AOP框架(包括Spring)都是以來攔截器做通知模型,並維護一個一連接點為中心的攔截器鏈。
通俗的講:
在Spring底層的代理攔截下切入點後,將切入點交給切麵類,切麵類中就要有處理這寫切入點的方法,這些過程就稱之為通知(也叫增強 增強方法)。正對於切入點執行的過程,通知還分為不同的類型,分別關註切入點在執行過程中的不同的時機。
目標對象(Target Object):被一個或者多個切麵所通知的對象,也被稱之為 被通知(advised)對象。既然Spring AOP是通過運行時代理實現的,這個對象永遠是一個被代理(Proxied)對象。
通俗的講:
就是真正希望被訪問到的對象。Spring底層的動態代理對他進行了代理,具體能不能真的訪問到目標對象,或在目標對象真正執行之前和之後是否做一些額外的操作,取決於切麵。
2.Spring的AOP入門案例
a.導入aop相關開發包
b.創捷一個切麵類
c.定義通知
d.定義一個連接點
e.配置連接點
在MyEclipse中導入aop的schema約束文件,以便於在配置文件中可以提示標簽。
在其中配置切入點:
f.定義切麵
g.執行方法,發現切麵確實起作用
3.切入點表達式
a.within表達式
通過類名進行匹配 粗粒度的切入點表達式
within(包名.類名)
則這個類中的所有的連接點都會被表達式識別,成為切入點。
在within表達式中可以使用*號匹配符,匹配指定包下所有的類,註意,只匹配當前包,不包括當前包的子孫包。
在within表達式中也可以用*號匹配符,匹配包
在within表達式中也可以使用..*匹配符,匹配指定包下及其子孫包下的所有類
b. execution()表達式
細粒度的切入idan表達式,可以以方法為單位定義切入點規則
語法:execution(返回值類型 包名.類名.方法名(參數列表,參數類型。。。))