Как аспект j + знак работает для унаследованных методов?

Я иду через AspectJ. Однако я не могу понять, как использовать + знак в подписи точки соединения.

Например:

call(String Stack+.pop());

Пользовательский стек:

public class Stack {

  public String pop() {
    return "abc";
  }

}


public class StackSubclass extends Stack{

}


public aspect SimpleAspect {

  pointcut p1(): call (String Stack+.pop());

  before() : p1() {
    System.out.println("Before advice");
  }
}


public class Main {

    public static void main(String[] args) {
        StackSubclass obj = new StackSubclass();
        System.out.println(obj.pop());
    }

}

Выход:

Before advice
abc

Без знака + в аспекте:

public aspect SimpleAspect {

  pointcut p1(): call (String Stack.pop());

  before() : p1() {
    System.out.println("Before advice");
  }
}

Выход:

Before advice
abc

Итак, мой вопрос, каково значение знака +? Потому что со знаком + и без него результат один и тот же.

1 ответ

Pointcut применяется к методу Stack.pop() в обоих случаях, потому что StackSubclass не переопределяет pop(),

Другие вопросы по тегам