2011-10-19 7 views
19

Próbuję zdefiniować punkt, który przechwyciłby każdą metodę opisaną (tj.) @CatchThis. To jest moja własna adnotacja.Spring AOP - punkt cięcia dla każdej metody z adnotacją

Co więcej, chciałbym mieć dostęp do pierwszego argumentu metody, który będzie typu Long. Mogą być też inne argumenty, ale nie obchodzi mnie to.


EDIT

To co mam teraz. Nie wiem, jak przekazać pierwszy parametr metody opatrzony komentarzem: @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

Co za pomocą ramy wiosny adnotacji? –

+0

Zaktualizowałem mój wpis. – emesx

Odpowiedz

22

Coś jak to powinno zrobić:

@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

Zaktualizowałem swój wpis. Czy mógłbyś zrobić to samo z twoim snippetem? Byłbym bardzo wdzięczny. – emesx

+0

@elmes OK, zaktualizowano –

+0

Dzięki. czy jest możliwe, aby złapać metody, które mają JEDNĄ Długą argumentację, która niekoniecznie jest pierwszym argumentem - może być pierwsza, druga ... czy ostatnia? – emesx