AspectJ pointcut для вызова метода в определенных методах - PullRequest
6 голосов
/ 28 июня 2011

Я хочу создать pointcut для целевого вызова метода из определенных методов.

принять следующее:

class Parent {
   public foo() {
     //do something
   }
}

class Child extends Parent {
   public bar1() {
     foo();
   }
   public bar2() {
     foo();
   }
   public bar3() {
     foo();
   }
}

Я бы хотел сократить точку при вызове foo () в методах bar1 () и bar3 ()

Я думал что-то вроде

pointcut fooOperation(): call(public void Parent.foo() && (execution(* Child.bar1()) || execution(* Child.bar3()) );

before() : fooOperation() {
  //do something else
}

однако, это не похоже на работу. есть идеи?

спасибо

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

Может быть withincode будет работать:

call(public void Parent.foo()) && (withincode(* Child.bar1()) || withincode(* Child.bar3()) );

В качестве альтернативы вы можете попробовать cflow pointcut:

pointcut bar1(): call(* Child.bar1());
pointcut bar3(): call(* Child.bar3());

call(public void Parent.foo()) && (cflow(bar1()) || cflow(bar3());

Найдите здесь ссылку на точечный вырез

2 голосов
/ 28 июня 2011

Подумайте, что вместо того, чтобы выполнять пункты выполнения (которые имеют дополнительный недостаток - требовать добавления для каждого нового вызывающего), нужно использовать target, например что-то вроде:

target(Child) && call(public void Parent.foo()).

Несколько удивительноЯ нашел руководства по pointcut в документации по eclipse весьма полезными.Они здесь .

...