2011-05-15 52 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