AspectJ的内部类的连接点(AspectJ Inner-Class Join points)

2019-08-03 10:49发布

我不知道有没有达到使用“//做些什么”的部分方面代码的方法吗?

提前致谢。

图兰。

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

Answer 1:

可以使用withincode切入点到包含类匹配,并且cflow的切入点到addActionListener方法,()方法的执行匹配,则结合起来,与一个执行切入点,以匹配actionPerformed()方法的主体。

例如,这将切入点仅在类测试的内部类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));


文章来源: AspectJ Inner-Class Join points