Главная » Spring » Определение терминологии AOP

0

Как и большинство технологий, в AOP сформировался свой соб- ственный жаргон. Аспекты часто описываются в терминах «сове- тов», «срезов множества точек сопряжения» и «точек сопряжения». Взаимосвязь этих понятий иллюстрирует рис. 5.2.

Рис. 5.2. Функциональность аспектов (советов) вплетается в поток выполнения программы в одной или нескольких точках сопряжения

К сожалению, многие термины, используемые для описания AOP, непонятны для непосвященных. Тем не менее они являются частью

идиомы AOP, и знать их совершенно необходимо для понимания AOP. Прежде чем пускаться в путь, нужно научиться говорить.

Совет

Когда учетчик снимает показания электросчетчика, его цель – со- общить в электрическую компанию количество потребленных кило- ватт. Конечно, он имеет список домов, которые он должен посетить, а информация, сообщаемая им, имеет большое значение. Но основ- ной работой учетчика является снятие показаний электросчетчиков.

Аспекты также имеют свою цель – работу, которую они призваны делать. В терминах AOP работа аспекта называется совет.

Совет определяет, что и когда делает аспект. В дополнение к опи- санию работы, выполняемой аспектом, совет учитывает, когда следу- ет ее выполнять. Будет ли она выполняться перед вызовом метода? После его вызова? Или и в том, и другом случаях? Или только когда метод возбудит исключение?

Аспекты Spring могут работать с пятью типами советов:

# до – работа выполняется перед вызовом метода;

# после – работа выполняется после вызова метода, независимо от результата;

#  после  успешного  вызова  – работа выполняется после вызова

метода, если его выполнение завершилось успешно;

#  после  исключения  – работа выполняется после того, как вы- званный метод возбудит исключение;

#  вокруг – аспект обертывает метод, обеспечивая выполнение не-

которых операций до и после вызова метода.

Точки  сопряжения

Электрическая компания обслуживает несколько домов, возмож- но даже целый город. В каждом доме имеется электросчетчик, с ко- торого требуется снимать показания, поэтому каждый дом являет- ся потенциальной целью учетчика. Теоретически учетчик способен снимать показания с любых приборов учета, но его работа заключа- ется в снятии показаний только с электросчетчиков.

Также и приложение может иметь тысячи точек применения со- вета. Эти точки известны как точки сопряжения (join points). Точка сопряжения – это точка в потоке выполнения приложения, куда мо- жет быть внедрен аспект. Это может быть вызов метода, возбуждение исключения или даже изменение поля. Все это – точки, куда может быть внедрен аспект для добавления новой особенности поведения.

Срезы множества точек сопряжения

Один учетчик просто физически неспособен посетить все дома, обслуживаемые электрической компанией. Вместо этого компания нанимает штат учетчиков и каждому из них определяет некото- рое количество домов, которые он должен посетить. Аналогично от аспекта не требуется воздействовать на все точки сопряжения в приложении. Срезы множества точек сопряжения помогают сузить множество точек для внедрения аспекта.

Если совет отвечает на вопросы что и когда, то срезы множества

точек сопряжения отвечают на вопрос где. Срез содержит одну или более точек сопряжения, куда должны быть вплетены советы. Час- то срезы множества точек сопряжения определяются за счет явного указания имен классов и методов или через регулярные выраже- ния, определяющие шаблоны имен классов и методов. Некоторые фреймворки, поддерживающие AOP, позволяют создавать срезы множества точек сопряжения динамически, определяя необходи- мость применения совета, опираясь на решения, принимаемые во время выполнения, такие как значения параметров метода.

Аспекты

В начале рабочего дня учетчик знает, что он должен сделать (составить отчет о потреблении электроэнергии) и какие дома он должен посетить. То есть он знает все, что необходимо знать для выполнения работы.

Аспект объединяет в себе совет и срез множества точек сопряже-

ния. Взятые вместе, они определяют все, что нужно знать об аспек- те, – что он делает, где и когда.

Внедрение

Внедрение позволяет добавлять новые методы или атрибуты в существующие классы. Например, можно создать класс-совет Auditable, хранящий информацию о том, когда объект был изменен в последний раз. Это может быть очень простой класс, состоящий из единственного метода, например setLastModified(Date), и переменной экземпляра для хранения этой информации. В дальнейшем новый метод и переменная могут быть внедрены в существующие классы без их изменения, добавляя новые черты поведения и информацию.

Вплетение

Вплетение – это процесс применения аспектов к целевому объекту для создания нового, проксированного объекта. Аспекты вплетаются

в целевой объект в указанные точки сопряжения. Вплетение может происходить в разные моменты жизненного цикла целевого объекта.

#  Во  время  компиляции  – аспекты вплетаются в целевой объ-

ект, когда тот компилируется. Это требует специального ком- пилятора, такого как AspectJ, вплетающего аспекты на этапе компиляции.

#  Во  время  загрузки  класса  – вплетение аспектов выполняется

в процессе загрузки целевого класса виртуальной машиной JVM. Это требует специального загрузчика, который дополня- ет байт-код целевого класса перед внедрением его в приложе- ние, например механизм load-time weaving (LTW) в AspectJ 5.

#  Во  время  выполнения  – вплетение аспектов производится во

время выполнения приложения. В этом случае контейнер AOP обычно динамически генерирует объект с вплетенным аспек- том, представляющий целевой объект.

Вы познакомились с довольно большим количеством терминов. Если теперь вернуться к рис. 5.2, можно увидеть, как совет, содержа- щий реализацию сквозной функции, может применяться к объектам в приложении. Точки сопряжения – это все точки в потоке выполнения приложения, к которым при необходимости можно было бы приме- нить совет. Срез множества точек сопряжения определяет, куда (к ка- ким точкам сопряжения) применяется этот совет. Здесь важно понять, что срез определяет точки сопряжения для применения совета.

Теперь, после знакомства с терминологией AOP, посмотрим, как эти основные концепции AOP реализованы в Spring.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии