For some language constructs implicit weaving goes on. You wouldn't see a weave info message for this but the code is modified to support the pointcuts you are using. I suspected this when you described the problem and showed your aspect, then I looked in the woven code and it was what I expected. The cflow pointcut inserts code so that we know if we are in a control flow. For example:
execution(* foo(..)) && cflow(execution(* bar(..))
will advise 'execution of foo' with a runtime check before the advice is called. That runtime check will be on a counter, which is incremented by code inserted into the execution of bar because of the cflow. So this:
public void foo() {
}
public void bar() {
foo();
}
becomes:
public void foo() {
if (counter>0) callAdvice();
}
public void bar() {
try {
counter++;
foo();
} finally {
counter--;
}
}
You are experiencing a variant of this. But at the moment I don't quite see which cflow is causing the proxy to be modified. You can probably experiment to determine it. do you just have the two or are there some others lurking?
cheers,
Andy