《Spring AOP》-----各種通知解析
阿新 • • 發佈:2019-01-23
前言
- 上一篇文章中,小編簡單介紹了SpringAop中的一些概念,意義、還有簡單入門的小例子,那麼現在小編帶著讀者解析一下SpringAop中的幾種通知,所謂的通知,就是切面中的幾種方法。
1、前置通知(切面類方法)
/*
* 在目標方法執行之前執行
* 引數:連線點
*/
public void beginTransaction(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName ();
System.out.println("連線點的名稱:"+methodName);
System.out.println("目標類:"+joinPoint.getTarget().getClass());
System.out.println("begin transaction");
}
配置檔案
<aop:before method="beginTransaction" pointcut-ref="perform"/>
2、後置通知(切面類方法)
/**
* 在目標方法執行之後執行
* 引數:連線點、目標方法返回值
*/
public void commit(JoinPoint joinPoint,Object val){
System.out.println("目標方法的返回值:"+val);
System.out.println("commit");
}
配置檔案
<!--
1、後置通知可以獲取到目標方法的返回值
2、當目標方法丟擲異常,後置通知將不再執行
-->
<aop:after-returning method="commit" pointcut-ref ="perform" returning="val"/>
3、最終通知(切面類方法)
public void finallyMethod(){
System.out.println("finally method");
}
配置檔案
<!--
無論目標方法是否丟擲異常都將執行
-->
<aop:after method="finallyMethod" pointcut-ref="perform"/>
4、異常通知(切面類方法)
/**
* 接受目標方法丟擲的異常
* 引數:連線點、異常
*/
public void throwingMethod(JoinPoint joinPoint,Throwable ex){
System.out.println(ex.getMessage());
}
配置檔案
<!--
異常通知
-->
<aop:after-throwing method="throwingMethod" throwing="ex" pointcut-ref="perform"/>
5、環繞通知(切面類方法)
/**
* joinPoint.proceed();這個程式碼如果在環繞通知中不寫,則目標方法不再執行
* 引數:ProceedingJoinPoint
*/
public void aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("aaaa");
joinPoint.proceed();//呼叫目標方法
}
配置檔案
<!--
能控制目標方法的執行
-->
<aop:around method="aroundMethod" pointcut-ref="perform"/>
小結:
- 前置通知是在目標方法執行之前執行;後置通知是在目標方法執行之後執行,但是目標方法如果有異常,後置通知不在執行;而最終通知無論目標方法有沒有異常都會執行;異常通知是捕獲異常使用的;環繞通知能控制目標方法的執行。這就是以上的幾種通知。小編將配置檔案簡單化,如果讀者想拿程式碼測試一下的話,可以結合著Spring
Aop入門將程式碼補全。