使用AspectJ从两个函数中获取参数

时间:2013-06-13 21:17:30

标签: java aspectj

我有一个程序,当点击一个按钮时,它会改变它的颜色。我有以下代码:

public void actionPerformed(ActionEvent e) {
    MyButton btn = (MyButton)e.getSource();
    int x = getNew();
    if(x == 0) {
        btn.setType(0);
        btn.setColor(type0);
    }
    if(x == 1) {
        btn.setType(1);
        btn.setColor(type1);
    }
    if(x == 2) {
        btn.setType(2);
        btn.setColor(type2);
    }
}

我想记录按钮以及每次单击它时会有的新颜色,所以我考虑从actionPerformed和setColor中公开参数。

每次从actionPerformed调用setColor时,我都会打印后者的参数。仅针对新颜色的切入点和建议:

public aspect Log {
pointcut change(Color c) : withincode(* actionPerformed(..)) && call(* *.setColor(..)) && args(c);

before(Color c) : change(c) {
    System.out.println("Chnging the color to " + c.toString());
}

}

有效。但我也想参加这个活动(所以我可以选择按钮及其旧颜色)。我怎么能做到这一点?它不适用于args()。我应该为actionPerformed()编写另一个切入点吗?

1 个答案:

答案 0 :(得分:0)

我用2分和2条建议解决了这个问题。我做了另一个切入点,使用execution从actionPerformed获取参数。这是第二个问题和建议:

pointcut change2(ActionEvent e) : execution(* *.actionPerformed(..)) && args(e);

before(ActionEvent e) : change2(e) {
    System.out.print("Changing from " + ((MyButton)e.getSource()).getColor().toString());
}