Spring AOP — Многоразовые выражения точечного вывода


Точечный вывод

Точечная точка — это набор из одной или нескольких точек соединения, в которых должен быть вызван совет. Вы можете объявить точечные точки с помощью выражений или шаблонов, как показано в примерах ниже.

Синтаксис

@Pointcut(» execution(modifiers? return-type declaring-type? method-name(param) throws?) «)

  • шаблон необязателен, если в нем есть символ ?
  • в шаблонах могут использоваться подстановочные знаки * (соответствует всему)
  • аннотация @Pointcut содержит набор из одной или нескольких точек соединения, в которых должен быть выполнен совет
  • модификаторы? (необязательный) — модификатор доступа метода, например, public, protected, private
  • return-type — тип возврата метода
  • declaring-type? (опционально) — имя пакета или класса
  • method-name(param) — имя метода с его параметрами.
  • param может принимать ноль или более аргументов. () соответствует методу, который не принимает никаких параметров, в то время как (…) соответствует любому количеству параметров (ноль или более). Шаблон (*) соответствует методу, принимающему один параметр любого типа.
  • throws? (необязательно) — тип исключения.

Комбинирование выражений указателей

Вы можете комбинировать объявления указателей, используя:
&&, ||, ! операторов.

Примеры

Объявление методов точечной привязки (не должно иметь тела)

@Pointcut("execution(public * dev.company.*.service.*.get*(..))")
public void pointCutTemplateServiceForGet() {}

@Pointcut("execution(public * dev.company.*.service.*.post*(..))")
public void pointCutTemplateServiceForPost() {}

@Pointcut("execution(public * dev.company.*.service.*.delete*(..))")
public void pointCutTemplateServiceForDelete() {}
Вход в полноэкранный режим Выйти из полноэкранного режима

Повторное использование указателя
В этом примере мы используем шаблон pointcut pointCutTemplateServiceForGet() дважды для двух разных советов

@Before("pointCutTemplateServiceForGet()")
// implementation goes here
Войти в полноэкранный режим Выйти из полноэкранного режима
@After("pointCutTemplateServiceForGet()")
// implementation goes here
Войти в полноэкранный режим Выйти из полноэкранного режима

Объедините несколько указателей с помощью &&

@After(pointCutTemplateServiceForGet() && pointCutTemplateServiceForPost())
// implementation goes here
Войти в полноэкранный режим Выйти из полноэкранного режима

Исключите вырезанную точку с помощью !

@Before(pointCutTemplateServiceForGet() && !(pointCutTemplateServiceForDelete()))
// implementation goes here
Войти в полноэкранный режим Выйти из полноэкранного режима

Исключение нескольких вырезов

@Before(pointCutTemplateServiceForDelete() && !(pointCutTemplateServiceForGet() || pointCutTemplateServiceForPost()))
// implementation goes here
Ввести полноэкранный режим Выйти из полноэкранного режима

Существует еще много возможностей при смешивании и сопоставлении выражений pointcut, но я оставлю это на ваше воображение.

Смотрите эту статью, чтобы узнать больше о Spring AOP.

Оцените статью
Procodings.ru
Добавить комментарий