2011-06-19 20 views
0

私はポイントカットのパラメータを持つだけで少し混乱していますが、感謝...ヘルプ - ときトレースメッセージがすべき誰も私にそれを説明することができれば、AspectJの

import Java.util.logging.*; 
import org.aspect j.lang.*; 

public aspect TraceAspect { 
private Logger _logger = Logger.getLogger("trace"); 

TraceAspectV2() { 
     _logger.setLevel(Level.ALL); 
} 

pointcut traceMethods() 
(execution(* Account.*(..)) || execution(*.new(..))) && !within(TraceAspect); 

before() : traceMethods() { 
    if (_logger.isLoggable(Level.INFO)) { 
      Signature sig = thisJoinPointStaticPart.getSignature(); 
      _logger.logp(Level.INFO, sig.getOeclaringType().getName(),sig.getNameO , "Entering"); 
      } 
    ) 
) 

ポイントカット面では定義されて生成される。つまり、プログラムのどの時点で「入力中」のログメッセージ が記述されます。

PS:これは過去の試験紙からである....と私は正確にロガーのように入力を生成しないときに理解しようとしています....

答えて

2

返される値、名前、またはパラメータに関係なく、Accountクラスのメソッドが実行される前に毎回入力されます(execution(* Account.*(..)))。 execution(*.new(..)) && Iwithin(TraceAspect)は、TraceAspectに含まれていないすべてのコンストラクタと一致します(Iwithinの代わりに!within(…)を読み取る必要があります - aspectJ cookbook on google booksを参照)。OCRは感嘆符!を大文字のi Iとして認識します。

+0

基本的には、アカウントのメソッドが実行され、traceAspect以外の任意のクラスのコンストラクタが実行されるたびに、入力が印刷されます。 – John

+0

@john:はい、正しい。 'execution'は、リフレクションコールに対してもアドバイスが実行されるようにします。他のオプションは 'call(...)'となりますが、アドバイスはメソッドへの直接呼び出しにのみ有効です – knittl

+0

助けてくれてありがとう... !!! – John

0

「入力」のメッセージがメソッドのマッチングの前に生成されます実行ポイントカットシグネチャ。これは、Accountクラスのnewへのすべての呼び出しをアドバイスしたようです。

関連する問題