2012-04-04 6 views
0

Ich muss alle Methoden des Typs writer.write (myObj) abfangen, und wenn und nur wenn myObj eine mit @BeforeWrite annotierte Methode enthält, führen Sie diese Methode aus.Implementieren @ Before/@ Post etwas mit Spring AOP

Ich bin irgendwie verwirrt, weil ich einen Methodenaufruf auf den Schreiber abfangen kann, aber ich weiß nicht, wie man einen Pointcut bereitstellt, der aussieht, wenn es eine Methode mit @BeforeWriter kommentiert, sieht das ähnlich aus wie wahrscheinlich a @PostLoad Annotation wird in JPA behandelt ...

Antwort

1

In Ihrer Interzeptor-Methode haben Sie das Argument vom Typ ProceedingJoinPoint, das die Methode getArgs() hat. Sie können Ihre Argument (myObj) Methodenreflexionen überprüfen und Ihre Entscheidung treffen, ob Sie fortfahren möchten. Beispiel (call ist vom Typ ProceedingJoinPoint):

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

Ich verstehe, ich habe über die Methoden zur Schleife, um zu überprüfen, ob es existiert ... richtig? – Edmondo1984

+0

Wenn Sie das Schleifen von Sammlungen nicht mögen und den prädikativen Ansatz bevorzugen, probieren Sie [Apache collection util] (http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html) aus. –