Как аспект 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()
,