2016-02-05 5 views
0

У меня есть класс аспект, который определяет одно выражение точка-среза, как показано нижеAspectJ LTW в затмение - Pointcut не работает со статическим методом

@Pointcut("execution(* com.vg.pw.tasks.shared.*.executeTasks(..))") 
public void myTraceCall() {} 

где executeTasks() метод является статическим. Если метод выполнен нестатический, тело метода выполняется при каждом вызове executeTasks(). Почему мой pointcut не эффективен для статических методов?

Я использую LTW, а не пружину.

ответ

1

Я просто опробовал выражение pointcut, и он работает как на статических, так и на нестатических методах так, как должен. Я использовал AspectJ weaver 1.8.7. Попробуйте добавить -showWeaveInfo и -verbose в свой файл aop.xml для отладки информации о LTW.

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> 
<aspectj> 
    <weaver options="-showWeaveInfo -verbose"> 
     <include within="q35218146..*" /> 
    </weaver> 
    <aspects> 
     <aspect name="q35218146.Aspect35218146"/> 
    </aspects> 
</aspectj> 

Это должно дать вам выход на STDERR похожее на это:

[[email protected]] weaveinfo Join point 'method-execution(void q35218146. 
Test35218146.executeTasks())' in Type 'q35218146.Test35218146' (Test35218146.java:6) 
advised by before advice from 'q35218146.Aspect35218146' (Aspect35218146.java) 
+0

@Kris: Я согласен, он должен работать на обоих статике и не-статики, если вы не изменили еще один фактор, такой как (под-) имя пакета или видимость метода. Если это не так, пожалуйста, покажите воспроизводимый [SSCCE] (http://sscce.org/). – kriegaex

+0

Забыл добавить опции '-verbose' в weaver. Я отредактировал свой ответ, чтобы включить этот вариант. –

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