0

特定のカテゴリに属さないアイテムが追加されている場合は、そのような追加が許可および禁止されている3つを除いて、警告を発行するポリシーを適用する必要があります。

これまでのところ、アイテムを見つけて警告を出すことはできますが、追加を停止する方法がわかりません。

たとえば

許可されるカテゴリ靴と靴下

しかし、野菜アイテムをインベントリに追加しようとすると、「カテゴリは許可されていません../nアイテムはインベントリに追加されません」という警告が表示されます.....次に次のアイテムに進みます....

これは私がこれまでに書いたものです.....

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

1 に答える 1

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。そうでない場合は、おそらく null を返すだけです。

于 2011-05-15T13:55:20.507 に答える