Pregunta

He estado usando AspectJ por un tiempo y funciona muy bien en los campos ámbito de los objetos que contienen anotaciones. Me acabo de encontrar con una situación en la que quiero para anotar una variable de alcance método que va a trabajar con mi punto de corte pero estoy teniendo problemas con él.

Aquí está el punto de corte que estoy usando. Funciona bien si mi variable es un campo para el objeto, pero si puedo reducir el alcance a un método (variable declarada dentro del método), entonces ya no funciona y no estoy seguro de por qué. Déjame saber lo que puedo hacer, gracias.

 after(final Trigger trigger): set(@Triggereable * *) && args(trigger)
 {
  System.out.println("trigger flush");
 }

Además, aquí es un exmaple de lo que quiero para el trabajo. Que System.out.println anterior debe disparar cuando se crea una instancia del disparador:

public void foo()
{
   @Triggereable
   private Trigger trigger = new Trigger();
}
¿Fue útil?

Solución

AspectJ no es compatible actualmente con puntos de corte en las variables locales (leer el FAQ ).

Me parece recordar una discusión reciente sobre la función de tales posiblemente un añadido muy pronto, pero no pude encontrar en la AspectJ seguimiento de incidencias ni en el archivos de las listas

Otros consejos

Si llegó a esta situación, es probable que tratar de cambiar la aplicación en lugar de aplicar las preocupaciones reales transversales. Básicamente, no es lo que se supone AOP y AspectJ que se utilizará para.

Como solución, se puede extraer ya sea relevante funcionalidad en un método separado y luego aplicar sus aspectos a ese método o, alternativamente, se puede sustituir un método completo con esa variable local, utilizando alrededor de consejo.

Más encima, en su ejemplo particular, el punto de corte se puede aplicar a la ejecución del constructor dentro del ámbito de un método dado, por lo que puede hacer prácticamente lo mismo sin unirse a una variable local.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top