2013-08-29 4 views
0

В чем разница между этими двумя точками? Когда следует использовать одну конструкцию над другой?AspectJ: target vs pattern для выбора методов в классе

pointcut first_pointcut(): target(MyClass) && call(void myMethod(..)) 
pointcut second_pointcut(): call(void MyClass.myMethod(..)) 

Мое замешательство началось при чтении AspectJ Programming Guide. Некоторые примеры в руководстве будут ограничивать Pointcut приложение к конкретным классам с помощью шаблонов подписи, как это:

call(public * Figure.* (..)) 

, который «выбирает каждый вызов открытых методов фигуры.» Другие примеры использование цели ограничить применение с пересечениями определенных классов, например:

pointcut setter(): target(Point) && 
       (call(void setX(int)) || 
       call(void setY(int))); 

, который «выбирает каждый вызов Setx (INT) или сеты (INT) при вызове на экземпляре Point.»

ответ

1

Целевой объект ожидает экземпляр указанного класса, в то время как сам вызов не имеет такого ограничения. Это означает, что pointcut с помощью только call (..) может также запускать статические методы, а один с целевым (Class) не может. Он только улавливает методы, выполняемые на объекте указанного класса (отсюда и название «target»).

Смежные вопросы