Путаница AspectJ с pointcut

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

Например:

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

также

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

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

Я пробовал «внутри кода», но, похоже, это работает только напрямую.

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


person esiegel    schedule 05.10.2010    source источник


Ответы (1)


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

  1. call метод или конструктор в классе Bar и быть within классом Foo или, в конечном итоге, конструктором Foo() с обозначением withincode. Совет для этой точки соединения может, например, установить флаг в значение true при вызове из Foo() и false в противном случае. Эта переменная может быть сохранена в HashMap с потоком в качестве ключа, чтобы избежать проблем параллелизма.
  2. withincode конструктор Bar() или внутри класса Bar и call object.Method(). Совет для этой точки соединения также должен проверять, установлен ли флаг в значение true. И, наконец, снова установите для флага Foo значение false.
person Espen    schedule 05.10.2010
comment
Я думаю, что cflow и cflowbelow просто созданы для обработки этого типа пометки в потоке выполнения. - person Doc Davluz; 18.04.2012