2011-10-19 12 views
19

Estoy tratando de definir un punto de corte, que capturaría todos los métodos anotados con (es decir) @CatchThis. Esta es mi propia anotación.Spring AOP - punto de corte para cada método con una anotación

Además, me gustaría tener acceso al primer argumento del método, que será del tipo Long. Puede haber otros argumentos también, pero no me preocupo por ellos.


EDITAR

Esto es lo que tengo en este momento. Lo que no sé es cómo pasar el primer parámetro del método anotado con @CatchThis.

@Aspect 
public class MyAspect { 
    @Pointcut(value = "execution(public * *(..))") 
    public void anyPublicMethod() { 
    } 

    @Around("anyPublicMethod() && @annotation(catchThis)") 
    public Object logAction(ProceedingJoinPoint pjp, CatchThis catchThis) throws Throwable { 
     return pjp.proceed(); 
    } 
} 
+0

¿Qué pasa con el uso del marco anotación de la primavera? –

+0

He actualizado mi publicación. – emesx

Respuesta

22

Algo como esto debería hacer:

@Aspect 
public class MyAspect{ 

    @Pointcut(value="execution(public * *(..))") 
    public void anyPublicMethod() { 
    } 

    @Around("anyPublicMethod() && @annotation(catchThis) && args(.., Long ,..)") 
    public Object logAction(
     ProceedingJoinPoint pjp, CatchThis catchThis, Long long) 
     throws Throwable { 

     return pjp.proceed(); 
    } 
} 
+0

He actualizado mi publicación. ¿Podrías hacer lo mismo con tu fragmento? Estaría muy agradecido. – emesx

+0

@elmes OK, actualizado –

+0

Gracias. ¿Es posible captar métodos que tienen UN argumento largo que no es necesariamente el primer argumento? ¿Puede ser el primero, el segundo ... o el último? – emesx

Cuestiones relacionadas