AspectJ内部加入点

时间:2009-09-02 07:58:30

标签: inner-classes aspectj

我想知道有没有办法使用“// do something”部分中的方面来获取代码?

提前致谢。

图兰。

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

1 个答案:

答案 0 :(得分:7)

您可以使用 in code 切入点中的来匹配包含的类,并使用 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));