Как я могу сопоставить все методы, доступные для определенного класса?
Например, у меня есть следующий класс hierarachy
A
/ | \
B C D
/ | \
E F I
|
T
Мне нужно сопоставить все методы, доступные в T
, поэтому это методы, определенные в самом T
, а также унаследованные методы из классов A
, C
, F
Я пришел к следующему pointcut, но не совсем доволен этим, потому что он соответствует многим другим классам, не связанным с T
:
execution(* A+.*(..)) && this(T)
Как я понимаю, с такой pointcut aspectj будет изменять каждый метод, определенный в классах A
, B
, C
, D
, E
, F
, I
, T
Я бы не хотел влиять на классы из семьи T
Было бы идеально, если бы затронуло только T
(унаследованные методы переопределены кодом aspectj). Существует множество классов, и я хочу свести к минимуму воздействие на остальную систему, то есть мне нужно изменить поведение только класса T
и не хочу, чтобы эти изменения влияли на другие классы.
Я мог бы переписать pointcut следующим образом: (execution(* A.*(..)) || execution(* C.*(..)) ||... <all parent classes>) && this(T)
. Но это заставляет меня убедиться, что иерархия правильная и обновляет ее всякий раз, когда меняется фактическая иерархия.
Благодарю.
Ваше предположение неверно, я просто попробовал и исследовал байтовый код. Совет будет только вплетен в A, C, F, T, потому что this()
можно определить статически во время компиляции.
Обновление: я забыл упомянуть, что ваш pointcut соответствует только методам, полученным из A и его подклассов. Если вы, как вы говорите в заголовке, действительно хотите сопоставить все унаследованные методы, используйте execution(* *(..)) && this(T)
.