AspectJ切入点和建议

时间:2011-05-15 12:24:37

标签: aop aspectj pointcut

如果要添加不属于特定类别的项目,我必须执行一项警告,除了允许的三个项目之外,不允许添加这些项目......

到目前为止,我能够找到物品并发出警告....但不知道如何阻止它们被添加....

对于Eg。

允许类别鞋子和袜子

但如果我尝试将蔬菜项添加到库存中,它应该给我一个警告说“不允许类别../ 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);
    }
}

1 个答案:

答案 0 :(得分:4)

为什么不使用around方面。然后,如果它们不属于正确的类别,则不进入该方法,因此如果跳过的方法只是进行添加,则会跳过它。

<强>更新

以下是Manning Publication的AspectJ In Action中的一个例子。

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,否则你可能只返回一个空值。