2011-05-15 75 views
0

我不得不強制發出警告的策略,如果被添加不屬於某一特定類別的項目,除了那些被允許和不允許這樣的添加三個.....AspectJ的切入點和建議

到目前爲止我能找到物品併發出警告....但不知道如何阻止它們被添加....

例如,

允許類鞋襪

但如果我嘗試並添加蔬菜項目庫存它應該給我一個警告說:「不允許類../ nItem域不會被添加到清單」 ... ..然後進行下一個項目....

這是我到目前爲止已經寫.....

pointcut deliverMessage() : 
    call(* SC.addItem(..)); 

pointcut interestingCalls(String category) : 
    call(Item.new(..)) && args(*, *, category); 

before(String category): interestingCalls(category) { 
    if(category.equals("Socks")) {  
     System.out.println("category detect: " + category); 
    else if(category.equals("Shoes")) 
     System.out.println("category detect: " + category); 
    else { 
     check=true; 
     System.out.println("please check category " + category); 
    } 
} 

回答

4

爲什麼不使用around方面代替。然後,如果它們不屬於正確的類別,則不會進入該方法,因此如果跳過的方法只是進行添加,則會跳過該方法。

UPDATE:

這裏是從AspectJ的一個例子在行動,通過曼寧公開。

public aspect ProfilingAspect { 
    pointcut publicOperation() : execution(public * *.*(..)); 
    Object around() : publicOperation() { 
    long start = System.nanoTime(); 
    Object ret = proceed(); 
    long end = System.nanoTime(); 
    System.out.println(thisJoinPointStaticPart.getSignature() 
     + " took " + (end-start) + " nanoseconds"); 
    return ret; 
    } 
} 

所以,如果你想檢查是否應該添加的項目,如果是允許的類別,然後只需要調用proceed,否則你只會返回一個空也許。

+0

嗨....我一直在嘗試但不知道如何繼續工作.... – John 2011-05-16 03:39:20