策略执行添加新项目 - ASPECTJ

时间:2011-05-17 04:25:18

标签: aop aspectj pointcut

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

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

允许类别鞋子和袜子

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

我知道我没有正确使用周围的建议......

1 个答案:

答案 0 :(得分:0)

你可能想要的是这样的:

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

}

请注意,如果类别与“shoes”或“socks”不同,我们不会调用proceed()方法。