2009-09-02 10 views
5

मुझे आश्चर्य है कि "// do something" भाग में पहलू का उपयोग करके कोड तक पहुंचने का कोई तरीका है?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 pointcuts उपयोग कर सकते हैं, और cflow pointcut addActionListener() विधि के निष्पादन से मेल खाते हैं, तो गठबंधन है कि एक साथ निष्पादित को कार्रवाई के शरीर से मेल खाने के लिए पॉइंटकट।() विधि।

उदाहरण के लिए इस pointcut केवल वर्ग टेस्ट के भीतरी वर्ग 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() विधि के निष्पादन मिलान है रुचि रखते हैं फ़ायदेमंद है, पर्याप्त होगा:

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