AOP: más llamadas a un punto de corte de lo que esperaba [cerrado]

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?

preguntado el 12 de junio de 12 a las 18:06

¿Hay algún método de inicialización estática en Receita? -

No, no hay, Receita en este momento no hace básicamente nada, solo el constructor estándar y la función adicionaIngrediente. -

¿Está la función main() dentro de Receita.java? -

Oh, qué inteligente, Suraj. Probablemente sea eso. -

podrías tener new Exception().printStackTrace(); para rastrear dónde se ejecuta el consejo -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.