2016-05-02 3 views
0

Ich habe den folgenden Code-basierten Stil Aspekt, der eine Annotation auf Feldebene im Code sucht und eine Methode mit diesem Feld als Argument aufruft. Dies ist, wie es aussieht ..Konvertieren von Code-basierten Stil in Annotation Based Style AOP mit Spring oder AspectJ

public aspect EncryptFieldAspect 
{ 
    pointcut encryptStringMethod(Object o, String inString): 
     call(@Encrypt * *(String)) 
     && target(o) 
     && args(inString) 
     && !within(EncryptFieldAspect); 

    void around(Object o, String inString) : encryptStringMethod(o, inString) { 
     proceed(o, FakeEncrypt.Encrypt(inString)); 
     return; 
    } 
} 

Die obige Methode funktioniert gut, aber ich möchte es Annotation im Frühjahr oder AspectJ, etwas Ähnliches zu dieser Basis konvertieren. Gefunden AspectJ docs ein bisschen jeden Hinweis verwirrend wäre hilfreich ..

import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 

@Aspect 
public class MyAspect { 

    @Around("execution(public * *(..))") 
    public Object allMethods(final ProceedingJoinPoint thisJoinPoint) throws Throwable { 
     System.out.println("Before..."); 
     try{ 
      return thisJoinPoint.proceed(); 
     }finally{ 
      System.out.println("After..."); 
     } 
    } 
} 

Antwort

1

nicht sicher, welche Dokumente der von Ihnen zu lesen - die Seiten bei https://eclipse.org/aspectj/doc/next/adk15notebook/ataspectj-pcadvice.html zeigen Ihnen, wie von Code in Annotations Stil zu übersetzen. Ich gebe zu, dass sie nicht so umfassend sind, wie sie sein könnten.

Grundsätzlich gilt:

  • Wechsel von Seiten Schlüsselwort @Aspect
  • bewegen Sie pointcut in einen String @Pointcut Anmerkung auf ein Verfahren angegeben
  • Ihren Rat von einem ungenannten Block in eine Methode übersetzen. (Dies kann um Rat heikel, weil die Argumente gehen zu)

IhrDeterm ursprünglich immer so etwas wie:

@Aspect 
public class EncryptFieldAspect 
{ 
    @Pointcut("call(@need.to.fully.qualify.Encrypt * *(java.lang.String)) && target(o) && args(inString) && !within(need.to.fully.qualify.EncryptFieldAspect)"); 
    void encryptStringMethod(Object o, String inString) {} 

    @Around("encryptStringMethod(o,inString)") 
    void myAdvice(Object o, String inString, ProceedingJoinPoint thisJoinPoint) { 
     thisJoinPoint.proceed(new Object[]{o, FakeEncrypt.Encrypt(inString)}); 
    } 
} 
+0

Hallo, ich habe einen sehr ähnlichen Anwendungsfall. Ich benutze Spring-Boot 1.4, und bekomme "Pointcut ist fehlerhaft: Fehler bei :: 0 formal ungebunden in Pointcut" während scheinbar die @Around Teil. Irgendein Rat? – oak

Verwandte Themen