2009-09-02 9 views
5

「//何か」の部分のアスペクトを使用してコードに到達する方法はありますか?AspectJインナークラス結合点

ありがとうございます。

トゥーラン。

public class Test { 
    private class InnerTest { 
     public InnerTest() { 
      JButton j = new JButton("button"); 
      j.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        //do something 
       } 
      }); 
     } 
    } 
} 

答えて

7

あなたが含むクラスと一致する内又はwithincodeにポイントカットを使用することができ、そしてCFLOWポイントカットは、次いで、addActionListener()メソッドの実行と一致を実行することを組み合わせることactionPerformed()メソッドの本体にマッチするポイントカット。

例えば、このポイントカットは、クラスTestの内部クラスInnerTest内actionPerformedメソッドの実行と一致する唯一のaddActionListenerメソッドの実行の流れ内(パッケージを想定testある):

pointcut innerTest(): within(test.Test.InnerTest) && 
    cflow(execution(public void javax.swing.JButton.addActionListener(java.awt.event.ActionListener))) && 
    execution(void actionPerformed(ActionEvent)); 

内部クラス内のactionPerformed()への呼び出しを照合することだけに興味がある場合は、cflow句を省略できます。

それはあなたが興味のあるすべてはどんなのactionPerformed()メソッドの実行が一致している場合、これは十分であることは注目に値します:

pointcut innerTest(): 
    execution(void java.awt.event.ActionListener+.actionPerformed(ActionEvent)); 
関連する問題