AOP: más llamadas a un punto de corte de lo que esperaba [cerrado]
Frecuentes
Visto 150 veces
3
Estoy probando AspectJ y al hacer un contador encontré algo que no entiendo. Aquí está el código:
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);
}
}
en el main() hay:
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));
en esta situación la salida muestra:
x = 1
x = 2
x = 1
x = 2
si quito el perthis()
declaración por lo que no se separará por objeto Receita la salida viene así:
x = 1
x = 2
x = 3
x = 4
x = 5
¿Cómo es posible que el contador llegue a 5 si solo hay 4 operaciones? ¿Considera la función main() o ejecuta la ejecución en otro momento?
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java aspectj aop or haz tu propia pregunta.
¿Hay algún método de inicialización estática en Receita? - Suraj Chandran
No, no hay, Receita en este momento no hace básicamente nada, solo el constructor estándar y la función adicionaIngrediente. - Vitor Paisante
¿Está la función main() dentro de Receita.java? - Suraj Chandran
Oh, qué inteligente, Suraj. Probablemente sea eso. - Jochen
podrías tener
new Exception().printStackTrace();
para rastrear dónde se ejecuta el consejo - Silly Freak