2009-09-02 12 views
5

"// bir şey yap" bölümünde görünen yönü kullanarak kodlara ulaşmanın bir yolu var mı?AspectJ Sınıfı Birleştirici puanlar

Şimdiden teşekkürler.

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 
       } 
      }); 
     } 
    } 
} 

cevap

7

Eğer içeren sınıf eşleştirmek için içinde veya withincode pointcuts kullanabilir ve cflow pointcut sonra, addActionListener() yönteminin yürütülmesine eşleşen bir ile çalıştırması birleştirmek actionPerformed() yönteminin gövdesiyle eşleşen pointcut. Örneğin

tek sınıf Testi iç sınıfı InnerTest içinde actionPerformed yönteminin yürütülmesine eşleşir bu pointcut sadece addActionListener yöntemin yürütülmesi akışı içinde ve (paket varsayılarak test olan)

pointcut innerTest(): within(test.Test.InnerTest) && 
    cflow(execution(public void javax.swing.JButton.addActionListener(java.awt.event.ActionListener))) && 
    execution(void actionPerformed(ActionEvent)); 
Eğer iç sınıfı içinde actionPerformed() çağrıları eşleşen sadece ilgileniyorsanız

Eğer cflow maddesini atlayabilirsiniz.

Tüm eğer herhangi actionPerformed() yönteminin yürütülmesine eşleşen edilir ilgilenen unutmamak gerekir, bu yeterli olacaktır:

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