2012-04-04 2 views
0

Мне нужно перехватить все методы типа writer.write (myObj), и тогда и только тогда, когда myObj содержит метод, аннотированный с помощью @BeforeWrite, выполните этот метод.Реализация @ Before/@ Опубликовать что-то с Spring AOP

Я немного смущен, потому что я могу перехватить вызов метода для писателя, но я не знаю, как предоставить pointcut, который выглядит, если есть метод, аннотированный с помощью @BeforeWriter, это похоже на то, Аннотации @PostLoad обрабатываются в JPA ...

ответ

1

В вашем методе обработки перехватчика у вас есть аргумент типа ProceedingJoinPoint, который имеет метод getArgs(). Вы можете проверить свои аргументы (myObj) и принять решение о продолжении. Пример (call имеет типа ProceedingJoinPoint):

boolean proceed = false; 
for (Method method : call.getArgs()[0].getClass().getMethods()) { 
    if (method.isAnnotationPresent(BeforeWriter.class)) { 
     proceed = true; 
     break; 
    } 
} 
+0

Я понимаю, что я должен цикл по методам проверки, если она существует ... верно? – Edmondo1984

+0

Если вам не нравится перебирать коллекции и предпочитайте предикативный подход, попробуйте [Apache collection util] (http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html). –

Смежные вопросы