1. 程式人生 > 實用技巧 >4.9 AOP-XML-環繞通知釋出

4.9 AOP-XML-環繞通知釋出

戴著假髮的程式設計師出品 抖音ID:戴著假髮的程式設計師歡迎關注

[檢視視訊教程]

所謂環繞通知就是在目標方法的前後可以通知增強,正因為這樣的情況,所以環繞通知可以阻止方法的執行,或者修改方法的返回值。

環繞通知也可以傳入一個引數ProceedingJoinPoint,ProceedingJoinPoint 是Joinpoint的一個子類,增強了一些方法,我們可以通過ProceedingJoinPoint 的proceed()呼叫被增強方法。

看案例:

業務方法:

 1 /**
 2  * @author 戴著假髮的程式設計師
 3  * @company http://www.boxuewa.com
4 * @description 5 */ 6 public class MessageBean { 7 //輸出資訊的業務方法 8 public String printMessage(String msg){ 9 System.out.println("MessageBean-printMessage:"+msg); 10 return msg; 11 } 12 }

在Aspect類中新增環繞通知的處理業務方法:

 1 /**
 2  * @author 戴著假髮的程式設計師
 3  * @company http://www.boxuewa.com
4 * @description 5 */ 6 public class DkAspect { 7 /** 8 * 環繞通知 9 */ 10 public Object round(ProceedingJoinPoint joinPoint) throws Throwable { 11 Object retVal = null; 12 System.out.println("--環繞通知開始--"); 13 //執行目標方法 14 try { 15 //這裡可以根據條件判斷是否要執行目標方法
16 retVal = joinPoint.proceed(); 17 //可以修改目標方法返回值 18 retVal = "環繞通知修改後的返回值"; 19 } catch (Throwable throwable) { 20 throwable.printStackTrace(); 21 } 22 System.out.println("--環繞通知結束--"); 23 return retVal; 24 } 25

在aop:config中新增環繞通知的配置:

 1  <!-- AOP配置 -->
 2     <aop:config>
 3         <!-- 申明AspectBean,引用我們註冊的dkAspect -->
 4         <aop:aspect id="aspect" ref="dkAspcet">
 5             <!-- 宣告一個切入點,命名為pointcut1 -->
 6             <!-- xml中不能使用 && ,邏輯與要使用and,-->
 7             <!-- 如果我們的before增強方法中傳入了引數msg,我就要使用args(msg)限定切入點 -->
 8             <aop:pointcut id="pointcut1"
 9                           expression="execution(* com.st.beans..*.*(..))"/>
10             <!-- 配置環繞通知 -->
11             <aop:around method="round" pointcut-ref="pointcut1"/>
12         </aop:aspect>
13     </aop:config>

執行業務方法測試:

1 ApplicationContext ac =
2         new ClassPathXmlApplicationContext("applicationContext.xml");
3 MessageBean bean = ac.getBean(MessageBean.class);
4 String retVal = bean.printMessage("假髮的穿戴技巧");
5 System.out.println("業務方法的返回值:"+retVal);

結果: