Главная » Spring » Выбор точек сопряжения в описаниях срезов Spring

0

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

В Spring AOP срезы множества точек сопряжения определяются на языке выражений AspectJ. Знакомые с расширением AspectJ не будут испытывать затруднений при определении срезов в Spring. Но если вы незнакомы с AspectJ, этот раздел послужит вам кратким учебником по определению срезов в стиле AspectJ. За более подроб- ной информацией о расширении AspectJ и языке выражений AspectJ я настоятельно рекомендую обратиться к книге Рамниваса Ладдада (Ramnivas Laddad) «AspectJ in Action, Second Edition».

Самое важное, что следует помнить о механизме формирования срезов множества точек сопряжения в стиле AspectJ, входящем в со- став Spring AOP, – он поддерживает ограниченное подмножество конструкций описания, доступных в AspectJ. Напомню, что модель Spring AOP основана на использовании прокси-объектов, а не- которые элементы выражений неприменимы в этой модели AOP. В табл. 5.1 перечислены указатели для использования в описаниях срезов в AspectJ, поддерживаемые в Spring AOP.

Таблица 5.1. Конструкции языка выражений описания срезов множества точек сопряжения в AspectJ, поддерживаемые аспектами в Spring

Указатель AspectJ

Описание

args()

Ограничивает срез точек сопряжения вызовами методов, чьи аргументы являются экземплярами указанных типов

@args()

Ограничивает срез точек сопряжения вызовами методов, чьи аргументы аннотированы указанными типами аннотаций

execution()

Соответствует точкам сопряжения, которые являются вызовами методов

this()

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

на компонент является ссылкой на прокси-объект указанного типа

target()

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

@target()

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

within()

Ограничивает срез точек сопряжений точками только внутри указанных типов

@within()

Ограничивает срез точек сопряжений точками внутри указанных типов, снабженных указанной аннотацией (в Spring AOP соответ- ствует вызовам методов в указанном типе, отмеченных указанной аннотацией)

@annotation

Ограничивает срез точек сопряжений точками, помеченными указанной аннотацией

Попытки использовать любые другие указатели AspectJ приведут к исключению IllegalArgumentException.

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

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

По теме:

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