Избегайте пересекающихся точек и аспектов в АОП - PullRequest
0 голосов
/ 01 октября 2019

В пакете com.repository у меня есть:

  1. Автономные интерфейсы, расширяющие хранилище данных пружины
  2. Интерфейсы, расширяющие хранилище данных пружины с моей собственной реализацией в том же пакете
  3. Классы репозитория, реализующие мои интерфейсы репозитория

Я бы хотел измерить время выполнения всех методов из пакета com.repository (связь с базой данных). Но я бы хотел избежать дублирования

теперь с

@ Pointcut ("выполнение (public * com.repository. . (..))")

У меня есть несколько методов, которые регистрируются дважды - из интерфейса и из класса, реализующего этот интерфейс. Я хотел бы либо не регистрировать методы из интерфейсов, которые реализуют класс в одном и том же пакете, или не регистрировать методы из классов, которые реализуют интерфейс из одного и того же пакета.

Как я могу выразить это с помощью pointcut и advice?

Мой вопрос немного связан с AspectJ: проблема при объединении нескольких точек в @Around advice , но это не решает мою проблему.

1 Ответ

1 голос
/ 08 октября 2019

Если объекты, которые вы отслеживаете, расположены в определенном пакете, почему вы не привязываете pointcut только к этому пакету.

Поэтому используйте

@Pointcut("execution(* com.repository.*.*(..))")

вместо

@Pointcut("execution(public * com.repository..*.*(..))")

, которые включают пакет com.repository и все его подпакеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...