Кто-нибудь может объяснить разницу между точками this()
и target()
в аспектеj. Я пытался найти это в другом месте, но, похоже, нет четкого ответа. Благодарю вас
This () против Target () аспекта
Ответы (1)
В совпадающей точке соединения this()
— это объект, в котором вы находитесь, target()
— это объект, который вы вызываете или на который ссылаетесь. Путаница может возникнуть, потому что в случае execution()
pointcut, совпадающего с точкой соединения, это одно и то же: объект, содержащий совпадающую точку соединения выполнения, совпадает с объектом, выполняющим метод, с которым вы сопоставляетесь. Но в случае точки соединения call()
они разные. Объект, выполняющий вызов, отличается от объекта, для которого вызывается метод.
class A {
public void m() {
B b = new B();
b.n();
}
}
class B {
public void n() {
}
}
Для этой настройки pointcut execution(* m(..))
будет соответствовать точке соединения A.m()
и иметь this()
типа A и target()
типа A (и они будут одним и тем же экземпляром A). Однако pointcut call(* n(..))
будет соответствовать месту вызова в методе A.m()
, где он вызывает n()
, и в этот момент this()
будет экземпляром A, выполняющим вызов, а target()
будет экземпляром B, для которого вызывается метод.