学習春のフレームワーク(3.2)AOPの復帰通知、異常通知、通知サラウンド

序文

レコードは、プロセスを学ぶ上で
事前通知を達成するためのXMLベースの設定ファイルに

認識に基づいてAOP XML設定ファイル

ニュースへ戻ります

復帰通知は、接続点の実行を完了実行した後、それが正常に実行され、またはスローされているかどうか、それが通知の内容が返されるで行う
例:
ログ通知カテゴリのいずれかに(1)を添加するLogAdvice方法。

  //此方法将为返回通知
    public void MyAfterReturnAdvice(JoinPoint afterjoinPoint){
        List<Object> list= Arrays.asList(afterjoinPoint.getArgs());
        //日志格式字符串
        String logInfo="返回通知:"+
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+
                " "+list.get(0).toString()+" 浏览商品: "+list.get(1).toString();
        System.out.println(logInfo);
    }

(2)XML構成ファイルを変更
要素追加<AOP:アフター復帰>:<態様AOP>で
<AOP:アフター復帰>及び<AOP:後>差
後に戻った後行った後、ない物質を正常終了方法、通知が実行された後であれば
ここに画像を挿入説明
ここに画像を挿入説明
、<:アフター復帰AOP>と:差<AOP後>の後、異常通知をテストされます

 <aop:after-returning method="MyAfterReturnAdvice" pointcut-ref="logpointcut"/>

ここに画像を挿入説明
これは、ビジネスでの記録方法を生成する実行ログのログ出力通知クラスメソッドの後ブラウズ復帰通知を見ることができます

異常の通知

行う異常通知例外が接続点でスローされた後、
実施例
(1)ログ通知LogAdviceクラスメソッドで追加されました

//此方法为异常通知
    public void MyThrowingAdvice(JoinPoint throwingPoint){
        //获取被调用的类名
        String targetClassName=throwingPoint.getTarget().getClass().getName();
        //获取被调用的方法名
        String targetMethodName=throwingPoint.getSignature().getName();
        //日志格式字符串
        String logInfo="异常通知:执行"+targetClassName+"类的"+
                targetMethodName+"方法时发生异常";
        System.out.println(logInfo);
    }

(2)変更MealServiceImplクラス、例外がスローされた人工

package com.BeforeAdvice.Impl;

import com.BeforeAdvice.Service.MealService;
import org.springframework.stereotype.Service;

@Service("mealService")
public class MealServiceImpl implements MealService {
    @Override
    public void browse(String LoginName, String mealName) {
        System.out.println("执行业务方法browse");
        //人为抛出异常
        throw new RuntimeException("这是一个人为抛出的异常");
    }

}

(3)xml配置

<aop:after-throwing method="MyThrowingAdvice" pointcut-ref="logpointcut" />

ここに画像を挿入説明

アドバイスアラウンド

前と、そのような通知の最も強力な種類がで可能であるメソッド呼び出し、前と後との接続点を、後の周りのアドバイスの周りのメソッド呼び出しの前と後にもサラウンドに必要ないくつかの操作をカスタマイズするには、ジョインポイントの処理を継続するかどうかを決定するための責任通知(メソッド呼び出しProeedingJoinPointを進めます)、又は割り込み実行
例:
(1)ログ通知LogAdviceクラスメソッドで追加されました

 //此方法为环绕通知
    public void MyAroundAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        long beginTime=System.currentTimeMillis();
        proceedingJoinPoint.proceed();
        long endTime=System.currentTimeMillis();
        //获得被调用的方法名
        String targetMethodName=proceedingJoinPoint.getSignature().getName();
        //日志格式字符串
        String logInfo="环绕通知:"+targetMethodName+"方法调用前时间"+
                beginTime+"毫秒,"+"调用后时间"+endTime+"毫秒";
        System.out.println(logInfo);
    }

(2)変更クラスMealServiceImpl閲覧方法は、
長期whileループ法で行います

 int i=10000000;
        while (i>0){
            i--;
        }

(3)は、XML構成ファイルを変更
MyAroundAdvice LogAdvice方法は、通知を囲むように指定されます

<aop:around method="MyAroundAdvice" pointcut-ref="logpointcut"/>

(4)試験は、
ここに画像を挿入説明
通知の時間参照を実行するビジネス方法の前と後に記録することができるの周りに見ることができます

リリース8元の記事 ウォンの賞賛0 ビュー164

おすすめ

転載: blog.csdn.net/key_768/article/details/103939951