2016-05-02 54 views
0

我有以下基於代碼的樣式方面,它在代碼中查找字段級別註釋並調用該字段作爲參數的方法。這是它的外觀..使用Spring或AspectJ將基於代碼的樣式轉換爲基於Annotation的樣式AOP

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; 
    } 
} 

上述方法工作得很好,但我想將其轉換爲基於Spring或AspectJ中,類似這樣的東西註釋。發現AspectJ的文檔有點混亂任何暗示將是有益的..

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..."); 
     } 
    } 
} 

回答

1

不知道哪個文件你在讀 - 在https://eclipse.org/aspectj/doc/next/adk15notebook/ataspectj-pcadvice.html頁面告訴你如何轉換從代碼的註釋風格。我承認他們沒有儘可能全面。

基本上:

  • 從方面關鍵字開關@Aspect
  • 移動您的切入點成一個字符串@Pointcut上的方法
  • 從一個未命名的塊劃分成方法翻譯你的意見指定註釋。 (這可能很麻煩周邊的意見,因爲自變量進行)

你原來成爲類似:

@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

您好,我有一個非常類似的用例。我正在使用spring-boot 1.4,並且正在處理@Around部分,並且出現「切入點錯誤:在:: 0正式未綁定的切入點處的錯誤」。有什麼建議? – oak