2016-05-04 6 views
1

Gibt es eine Möglichkeit, eine benutzerdefinierte oder eine vorhandene Annotation zu erstellen, um den Code auszulösen, der ausgeführt wird, wenn die mit Annotationen versehene Methode aufgerufen wird? Vorzugsweise möchte ich Spring-Bibliotheken verwenden.Führen Sie eine andere Funktion aus, wenn eine mit Annotationen versehene Methode aufgerufen wird

Zum Beispiel:

@SendEmail("templateName") 
public void doSomething() { 
    log.info("Something is happening"); 
} 

public void sendEmail(String templateName) { 
    // This method is called everytime doSomething() is called 
    log.info("Sending email using template " + templateName); 
} 
+1

Warum nicht einfach anrufen 'sendEmail' von innen' doSomething'? – user3719857

+0

'sendMail' würde von mehreren Methoden in verschiedenen Klassen im System mit verschiedenen Vorlagen verwendet werden. Mein Gedanke hinter diesem ist, dass ich in der Lage sein würde zu vermeiden, 'sendMails's Klasse in jeder dieser Klassen zu deklarieren/autowiring, um Unordnung oder Verweise auf statische Methoden zu vermeiden – SelketDaly

+2

Nun, das einzige, woran ich denken kann, sind Interzeptoren, aber ich nicht Ich weiß nicht, ob das funktioniert. – user3719857

Antwort

0
@Component 
@Aspect 
public class Mail { 
    @After("execution (@com.yourdirectoryofyourcustomAnnotation.SendMail * *(..))") 
    public void sendEmail(JointPoint jp){ 
     // it will send a mail after every method which tagged by your annotation 
    } 
} 
Verwandte Themen