天天看點

spring學習筆記(8)AOP增強(advice)配置與應用增強類型前置增強和後置增強配置環繞增強配置異常增強配置

增強(advice)主要包括如下五種類型

1. 前置增強(beforeadvice):在目标方法執行前實施增強

2. 後置增強(afterreturningadvice):在目标方法執行後實施增強

3. 環繞增強(mrthodinterceptor):在目标方法執行前後實施增強

4. 異常抛出增強(throwsadvice):在目标方法抛出異常後實施增強

5. 引介增強(introductionintercrptor):在目标類中添加一些新的方法和屬性

下面通過執行個體代碼來分析前置增強,假如現在要作日志記錄,記錄了什麼人調用什麼方法。前置增強的配置可歸納為如下步驟:

peoxyfactorybean是factorybean的實作類,我們知道factorybean負責初始化bean,而proxyfactorybean則負責為其他bean建立代理執行個體,通過在xml中配置後注入使用

測試列印:

前置日志記錄: zenghao調用了speak方法,傳入參數為:21 hello i’m 21 years old 後置日志記錄: zenghao調用了speak方法,傳回值為:i’m return value

在前面的基礎上,我們新增環繞增強類:

在aop.xml中類似前置增強增加環繞增強配置,運作測試方法,得到結果:

21——public abstract java.lang.string test.aop.itarget.speak(java.lang.integer)——class test.aop.target——speak 環繞增強調用結束 後置日志記錄: zenghao調用了speak方法,傳回值為:i’m around return value 從以上我們能看到,當同時使用環繞增強和前後置增強時,它們的執行順序

常用場景為配置實物管理器,當進行資料庫操作的方法發生異常時,可被異常增強捕獲,進行失誤復原等操作。一個抛出異常增強的執行個體如下所示:

其中有幾點是需要注意的: 1. 方法名必須為:afterthrowing 2. 三個入參method method, object[] args, object target 要麼一起提供,要麼都不提供,而最後一個入參必須為throwable或其子類。當目标對象抛出異常時,增強會調用相似度最高的比對異常類的方法(在類的繼承樹上,兩個類的距離越近,相似度就越高)

關于引介增強,它可以動态地為類增加新的接口或方法,具有難以想象的動态特性,在後面的學習中我們會再單獨提到。