AspectJ内部加入点

5 aspectj inner-classes

我想知道有没有办法使用"//做某事"部分中的方面来达到代码?

提前致谢.

图兰.

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

Ric*_*ler 7

可以使用withincode切入点到包含类匹配,并且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));
Run Code Online (Sandbox Code Playgroud)

如果您只想在内部类中匹配对actionPerformed()的调用,则可以省略cflow子句.

值得注意的是,如果您感兴趣的是匹配任何actionPerformed()方法的执行,这就足够了:

pointcut innerTest(): 
    execution(void java.awt.event.ActionListener+.actionPerformed(ActionEvent));
Run Code Online (Sandbox Code Playgroud)