[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] type matching & weaving

Hi Andy,

Possibly I need to know a bit more about specifics (the pointcut at least).  if the weaveinfo message comes out then the bytecode has been changed and that changed form is what will run.  However, if the weaveinfo indicates weaving has happened 'with a runtime test' it means something about your pointcut could not be purely statically evaluated and so a small test will occur at runtime to determine if the advice should actually run - in this situation you can see the weaveinfo but your advice not apparently executing.  Are the files and pointcuts something like this?

-- A.java --
interface I {
  int foo();

class A implements I {
  public int foo() { return 42; }

class Extender extends A {
  public int foo() { return 67; }
-- End of A.java --

-- X.java --
aspect X {
  before(): execution(* I+.*(..)) {}
-- End of X.java --

-- aop.xml --
<aspect name="X"/>
<weaver options="-showWeaveInfo -verbose">
  <include within="A"/>
  <include within="I"/>
  <include within="X"/>
  <include within="Extender"/>
-- End of aop.xml --

java -javaagent:aspectjweaver.jar A
[AppClassLoader@1f12c4e] info AspectJ Weaver Version DEVELOPMENT built on Wednesday Sep 24, 2008 at 20:57:28 GMT
[AppClassLoader@1f12c4e] info register classloader sun.misc.Launcher$AppClassLoader@1f12c4e
[AppClassLoader@1f12c4e] info using configuration /C:/asc/ws/aspects/META-INF/aop.xml
[AppClassLoader@1f12c4e] info register aspect X
[AppClassLoader@1f12c4e] weaveinfo Join point 'method-execution(int A.foo())' in Type 'A' (A.java:6) advised by before advice from 'X' (X.java:2)
[AppClassLoader@1f12c4e] weaveinfo Join point 'method-execution(int Extender.foo())' in Type 'Extender' (A.java:14) advised by before advice from 'X' (X.java:2)
[AppClassLoader@1f12c4e] info processing reweavable type X: \X.java
Advice running

I can remove the inclusion of A, I and X from the aop.xml and the same output occurs....


2008/9/26 <andymorton@xxxxxxxxxxxxxx>
I have 3 classes:
1) Interface: myInterface
2) Class myClass (implements myInterface)
3) Extended myExtendedClass (extends myClass, and overrides a method)

I have a pointcut defined on a method on myInterface, which at runtime, is executed via the extended class. The advice will be run ok whenever I dont add any includes to the weaver options.
If however I add the names of the classes via an include  eg <include within="com.morty.test.myInterface" />, then the advice is never executed.

The files however are weaved, and the weaveInfo shows the advice being linked, with or without the <include>
Obviously, there is a performance hit with having every class go through the weaver, and so i want to limit it.

Any idea why this would happen?

Many thanks in advance


aspectj-users mailing list