私は AspectJ を試していますが、カウンターを作成する際に、理解できないものに遭遇しました。コードは次のとおりです。
aspect testaAssociacao perthis(execucoesReceita()){
pointcut execucoesReceita() : execution(* Receita.*(..));
int x;
//constructor
public testaAssociacao() { x = 0; }
after(): execucoesReceita(){
x = x+1;
System.out.println("x = "+x);
}
}
main() には次のものがあります。
Receita r1 = new Receita("bolo1");
Receita r2 = new Receita("bolo2");
r1.adicionaIngrediente(new Ingrediente("FARINHA", 3));
r1.adicionaIngrediente(new Ingrediente("leite", 1));
r1.adicionaIngrediente(new Ingrediente("FARINHA", 2));
r1.adicionaIngrediente(new Ingrediente("leite", 3));
この状況では、出口は次のように表示されます。
x = 1
x = 2
x = 1
x = 2
perthis()
オブジェクト Receita によって分離されないように宣言を削除すると、出口は次のようになります。
x = 1
x = 2
x = 3
x = 4
x = 5
操作が 4 回しかない場合に、カウンターが 5 に達した可能性はありますか? main() 関数を考慮しますか、それとも別の時点で実行しますか?