1. 程式人生 > >《Spring AOP》-----各種通知解析

《Spring AOP》-----各種通知解析

前言

  • 上一篇文章中,小編簡單介紹了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入門將程式碼補全。