AspectJの概要

Eclipse への ADJT プラグインのインストール

AspectJプロジェクトの作成

[ファイル]-[新規]-[その他]

Ajdt3.png

こんなアプリを作る

ログ出力のAspectを適用する

package com.snail.exam.aj.omikuji;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;

@Aspect
public class OmikujiLogger {
  @Pointcut("execution(public * com.snail.exam.aj.omikuji.*.*(..)) && !within(OmikujiLogger)")
  public void someMethodExecute() {}
  
  @Pointcut("call(public * com.snail.exam.aj.omikuji.*.*(..)) && !within(OmikujiLogger)")
  public void someMethodCall() {}
  
  @Before("someMethodExecute()")
  public void beforeExecute(JoinPoint thisJoinPoint){
    dumpJoinPoint("beforeExecute()",thisJoinPoint);
  }

  @After("someMethodExecute()")
  public void afterExecute(JoinPoint thisJoinPoint){
    dumpJoinPoint("afterExecute()",thisJoinPoint);
  }
  
  @AfterReturning("someMethodExecute()")
  public void returnExecute(JoinPoint thisJoinPoint){
    dumpJoinPoint("returnExecute()",thisJoinPoint);
  }
  
  @AfterThrowing("someMethodExecute()")
  public void throwExecute(JoinPoint thisJoinPoint){
    dumpJoinPoint("throwExecute()",thisJoinPoint);
  }

  @Before("someMethodCall()")
  public void beforeCall(JoinPoint thisJoinPoint){
    dumpJoinPoint("beforeCall()",thisJoinPoint);
  }

  @After("someMethodCall()")
  public void afterCall(JoinPoint thisJoinPoint){
    dumpJoinPoint("afterCall()",thisJoinPoint);
  }

  @AfterReturning("someMethodCall()")
  public void returnCall(JoinPoint thisJoinPoint){
    dumpJoinPoint("returnCall()",thisJoinPoint);
  }
  
  @AfterThrowing("someMethodExecute()")
  public void throwCall(JoinPoint thisJoinPoint){
    dumpJoinPoint("throwCall()",thisJoinPoint);
  }

  private void dumpJoinPoint(String src,JoinPoint joinPoint){
    Signature sig = joinPoint.getSignature();
    String jPointName = sig.toLongString();
    
    System.out.println(src+"\t("+jPointName+")");
  }

}

アドバイスの発生順序

ボタンを押したときに、Method と Advice がどういう順番で動くのか? 実際にこの「おみくじプログラム」を動かしてみた。

ログの埋め込みだけでもありがたい


Java#AspectJ


*1 というか、それしか使い道がないと揶揄されている

添付ファイル: fileAjdt2.png 713件 [詳細] fileAjdt3.png 709件 [詳細] fileAjdt4.png 712件 [詳細] fileAjdt1.png 698件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2008-04-10 (木) 02:30:19 (3164d)
ISBN10
ISBN13
9784061426061