AspectJ путаница с pointcut - PullRequest
       20

AspectJ путаница с pointcut

4 голосов
/ 05 октября 2010

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

Например:

Foo() calls Bar() calls object.Method()

также

NotFoo() calls Bar() calls object.Method()

Я хочу, чтобы pointcut работал только внутри Foo ()

Я пытался "в пределах кода", но, похоже, это работает только напрямую.

Спасибо, Эрик

1 Ответ

4 голосов
/ 05 октября 2010

Для того, что вы хотите, на самом деле требуется две точки соединения:

  1. call метод или конструктор в классе Bar и within класс Foo или, в конце концов, конструктор Foo () с обозначением withincode.Рекомендация для этой точки соединения может, например, установить флаг true, когда вызывается из Foo (), и false в противном случае.Эта переменная может храниться в HashMap с потоком в качестве ключа, чтобы избежать проблем с параллелизмом.
  2. withincode Конструктор Bar () или внутри класса Bar и call object.Method ().Совет этой точке соединения также должен проверить, установлен ли флаг в значение true.И, наконец, снова установите флаг Foo в значение false.
...