AspectJ путаница с pointcut
Как я могу выразить срез точки, который находит методы только при вызове из другого метода, но не напрямую?
Например:
Foo() calls Bar() calls object.Method()
также
NotFoo() calls Bar() calls object.Method()
Я только хочу, чтобы pointcut работал внутри Foo()
Я попытался "в пределах кода", но это, кажется, работает только непосредственно.
Спасибо Эрик
1 ответ
Решение
То, что вы хотите, на самом деле требует двух точек соединения:
call
метод или конструктор в классе Bar и бытьwithin
Класс Foo или, в конце концов, конструктор Foo() сwithincode
целеуказатель. Рекомендация для этой точки соединения может, например, установить флаг true, когда вызывается из Foo(), и false в противном случае. Эта переменная может быть сохранена в HashMap с потоком в качестве ключа, чтобы избежать проблем параллелизма.withincode
Bar () конструктор или внутри класса Bar иcall
object.method(). Совет этой точке соединения также должен проверить, установлен ли флаг в значение true. И, наконец, снова установите флаг Foo в false.