2010-10-05 5 views
4

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

Например:

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

также

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

Я только хочу срез точек работать в Foo()

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

Благодаря Эрик

ответ

4

То, что вы хотите на самом деле требует двух joinpoints:

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

Я думаю, что cflow и cflowbelow созданы для управления этим типом пометок в потоке выполнения. – PomCompot

Смежные вопросы