2011-05-17 16 views
0

我必須執行一個策略,如果不屬於特定類別的項目被添加,除了允許和禁止這樣的添加項之外,還會發出警告.....策略執行添加一個新項目 - ASPECTJ

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

允許類鞋襪

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

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

import org.aspectj.lang.*; 

public aspect a8 { 

    boolean check; 

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

    pointcut interestingcalls(String categorie): call(Item.new(..)) && args(*, *, categorie); 

     before(String categorie): interestingcalls(categorie) 
     { 
     if(categorie.equals("Shoes")) 
     {   
     System.out.println("categorie detect:" +categorie); 
     } 
     else if(categorie.equals("socks")) 
     {   
     System.out.println("categorie detect:" +categorie); 
     } 
     else 
     { 
     check=true; 
     around(categorie); 
     System.out.println("please check categorie" +categorie); 
     } 
    } 

    around(String categorie): interestingcalls(categorie) { 
      System.out.println("Start! "+categorie); 
      proceed(categorie); 
      System.out.println("End!"); 
    } 
} 

我知道我無法正常使用around通知。 ...

回答

0

你probabily要被comething這樣的內容:

public aspect CartAspect { 

    pointcut checkAdd(String categorie) : call (void ShoppingCart.addItem(*)) && args(categorie); 

    void around(String categorie) : checkAdd(categorie) { 
     System.out.println("Start! " + categorie); 
     if (categorie.equals("shoes")) { 
      System.out.println("categorie detect:" + categorie); 
      proceed(categorie); 
     } else if (categorie.equals("socks")) { 
      System.out.println("categorie detect:" + categorie); 
      proceed(categorie); 
     } else { 
      System.out.println("please check categorie " + categorie); 
     } 
     System.out.println("End!"); 
    } 

} 

注意,在該類別是「鞋」或「襪子」不同的情況下,我們不調用proceed()方法。