2009-09-02 7 views
5

Mi chiedo se ci sia un modo per raggiungere il codice usando l'aspetto nella parte "// fa qualcosa"?AspectJ Inner-Class Punti di unione

Grazie in anticipo.

Turan.

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

risposta

7

È possibile utilizzare il entro o withincode pointcut per corrispondere alla classe contenente, e il pointcut CFLOW per abbinare l'esecuzione del metodo addActionListener(), allora si combinano con un eseguire collegamento di punti per abbinare il corpo del metodo actionPerformed().

Ad esempio questo pointcut corrisponderà esecuzione del metodo actionPerformed solo all'interno della classe InnerTest interna della classe Test (supponendo che il pacchetto è test) e solo all'interno del flusso di esecuzione del metodo addActionListener:

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

Se si è interessati solo ad associare le chiamate a actionPerformed() all'interno della classe interna, è possibile omettere la clausola cflow.

vale la pena notare che se tutto quello che interessa è abbinando l'esecuzione di qualsiasi metodo actionPerformed(), questo sarebbe sufficiente:

pointcut innerTest(): 
    execution(void java.awt.event.ActionListener+.actionPerformed(ActionEvent));