5

我想知道有没有办法使用“//做某事”部分中的方面来访问代码?

提前致谢。

图兰。

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

1 回答 1

7

您可以使用insideinsidecode切入点来匹配包含类,并使用cflow切入点来匹配 addActionListener() 方法的执行,然后将其与执行切入点相结合以匹配 actionPerformed() 方法的主体。

例如,此切入点将仅在类 Test 的内部类 InnerTest 内匹配 actionPerformed 方法的执行(假设包为test,并且仅在 addActionListener 方法的执行流程内匹配:

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));
于 2009-09-06T17:04:30.290 回答