Аспектно-ориентированное программирование: различия между версиями

Содержимое удалено Содержимое добавлено
м →‎AspectJ: стилевые правки
Строка 56:
 
=== Конструкция ''pointcut'' и точки соединения ===
Прежде всего, рассмотрим, что представляет собой '''join point''' ({{lang-ru|точка соединения}}). Точки соединения — это однозначно определенныеопределённые точки при выполнении программы. Так под точками соединения в AspectJ подразумеваются: вызовы [[:w:ru:Метод (языки программирования)|методов]], точки обращения к членам класса и исполнение блоков [[:w:ru:Обработка исключений|обработчиков исключений]] и т. д. Точки соединения могут, в свою очередь, содержать другие точки соединения. Например, результат вызова метода может передаваться каким-то другим методам. А pointcut является языковой конструкцией, которая отбирает множество точек соединения на основании определенного критерия. В приведенном выше примере первый pointcut под именем <code>publicMethods</code> выбирает исполнения всех <code>public</code> методов в пакете org.apache.cactus. Подобно тому как <code>int</code> является базовым типом Java, так <code>Execution</code> является базовым pointcut. Он выбирает исполнения методов, соответствующих сигнатуре, заданной в скобках. Для сигнатур допустимо включение символов шаблонов: в приведенном примере оба pointcut-а содержат несколько таких символов. Второй pointcut с именем <code>logObjectCalls</code> выбирает все исполнения методов в классе Logger. Третий pointcut — <code>loggableCalls</code> — объединяет два предыдущих, используя <code>&& !</code>, что означает выбор всех public методов из org.apache.cactus за исключением таковых в классе Logger. (Регистрация log методов привела бы в результате к бесконечной рекурсии).
 
=== Конструкция advice ===