This () против Target () аспекта

Кто-нибудь может объяснить разницу между точками this() и target() в аспектеj. Я пытался найти это в другом месте, но, похоже, нет четкого ответа. Благодарю вас


person Sam    schedule 16.12.2015    source источник


Ответы (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, для которого вызывается метод.

person Andy Clement    schedule 16.12.2015