2009-09-02 5 views
5

"something something"부분의 aspect를 사용하여 코드에 접근하는 방법이 있습니까?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에() 메소드의 실행과 일치 으로을 실행할 것을 결합 pointcut은 actionPerformed() 메소드의 본문과 일치합니다. 예를 들어

만 클래스 테스트의 내부 클래스 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));