2017-06-27 3 views
0

Ich versuchte Aspect generische Anmerkung wieGenerisches Rückgabetyp möglich mit Frühling AOP

@Aspect 
@Component 
public class CommonAspect<T extends CommonEntity>{ 


    @AfterReturning(value = "@annotation(audit)",returning="retVal") 
    public void save(JoinPoint jp,T retVal, Audit audit) { 

     Audit audit = new Audit(); 
     audit.setMessage(retVal.getAuditMessage()); 
     //other code to store audit 

    } 


} 

Ist das möglich zu schaffen? es scheitert in meinem Fall. Ich möchte diese @Audit Annotation für Person, Benutzer usw. verschiedene Art von Entität verwenden. Der Rückgabewert kann also generisch sein.

+0

bitte weiter ausarbeiten –

+0

Können Sie die vollständigen Aspect-Codes anhängen? –

+0

@LipingHuang hinzugefügt vollständige Aspektcodes – NFE

Antwort

1

Es scheint, dass Sie versuchen, einen Aspekt für Methoden zu definieren, die CommonEntity zurückgeben. In diesem Fall müssen Sie keine Generika verwenden, können Sie nur die allgemeine Erklärung entfernen und leicht Ihre Aspekt Erklärung anzupassen:

@Aspect 
@Component 
public class CommonAspect { 


    @AfterReturning(value = "@annotation(audit) && execution(CommonEntity *(..))",returning="retVal") 
    public void save(JoinPoint jp, CommonEntity retVal, Audit audit) { 

     Audit auditInfo = new Audit(); 
     auditInfo.setMessage(retVal.getAuditMessage()); 
     //other code to store audit 

    } 


} 

Was ich getan habe, ist die T in der Argumentliste ersetzen und hinzufügen execution(CommonEntity *(..)) an den Pointcut-Ausdruck, um die Übereinstimmung mit Pointcuts zu beschränken, bei denen CommonEntity zurückgegeben wird.

+0

Danke. Ich habe ähnliche Änderungen gemacht, aber es konnte Aspekt noch nicht erkennen. Funktioniert es, wenn Aspekt in einem separaten Modul definiert ist? – NFE

+0

Es funktioniert mit "Ausführung (* * (..)) und CommonEntity-Parameter. Vielen Dank für Hinweis :) – NFE

Verwandte Themen