У меня есть следующие классы
class A {
public void someone() {
helpMe();
}
private void helpMe() {
// do something here
}
}
class B extends A {
public void help() {
super.someone();
}
}
class C extends A {
public void me() {
super.someone();
}
}
Поэтому я хочу что-то делать каждый раз, когда вызывается метод helpMe
. A.helpMe()
никогда не вызывается явно. Все вызовы метода для A.helpMe()
осуществляются через A.someone()
, который далее вызывается через B.help()
или C.me()
.
helpMe
содержит общую реализацию, которая нужна любому другому классу.
точки, которые я пробовал
execution(* A.helpMe(..)) // does not work
execution(* A+.helpMe(..)) // does not work
execution(* *.helpMe(..)) // does not work
execution(* A.*(..)) // does not work
execution(* B.someone(..)) // does not work
execution(* A+.*(..)) // forms a point cut for B.help() and C.me() only
execution(* *.*(..)) // forms a point cut for B.help() and C.me() only
execution(* B.*(..)) // forms a point cut for B.help() only
Где-то читал, что pointcuts
для super
нельзя. Если это так, каковы некоторые допустимые обходные пути?
Я пытался получить pointcut
с помощью annotations
, но это тоже не работает.