Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] staticinitialization and target class

Hi Simone,
Thanks... I did what you said but there is a problem. During the compile there is no error but it seems the static block doesn't work. I tried to decompile the target class to see what changes AspectJ has applied and I can see a static block has been created but it is commented as follow:


  // ERROR //
  static
  {
    // Byte code:
    //   0: new 87    org/aspectj/runtime/reflect/Factory
    //   3: dup
    //   4: ldc 88
    //   6: ldc 90
    //   8: invokestatic 96    java/lang/Class:forName    (Ljava/lang/String;)Ljava/lang/Class;
    //   11: invokespecial 99    org/aspectj/runtime/reflect/Factory:<init>    (Ljava/lang/String;Ljava/lang/Class;)V
    //   14: astore_0
    //   15: aload_0
    //   16: ldc 101
    //   18: aload_0
    //   19: ldc 103
    //   21: ldc 90
    //   23: invokevirtual 107    org/aspectj/runtime/reflect/Factory:makeInitializerSig    (Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/InitializerSignature;
    //   26: iconst_0
    //   27: invokevirtual 111    org/aspectj/runtime/reflect/Factory:makeSJP    (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
    //   30: putstatic 79    com/foo/listener/MyListener1:ajc$tjp_0    Lorg/aspectj/lang/JoinPoint$StaticPart;
    //   33: goto +28 -> 61
    //   36: astore_0
    //   37: aload_0
    //   38: instanceof 71
    //   41: ifeq +8 -> 49
    //   44: aload_0
    //   45: checkcast 71    java/lang/ExceptionInInitializerError
    //   48: athrow
    //   49: nop
    //   50: invokestatic 77    com/foo/aspect/EventDispatcherAspect:aspectOf    ()Lcom/foo/aspect/EventDispatcherAspect;
    //   53: getstatic 79    com/foo/listener/MyListener1:ajc$tjp_0    Lorg/aspectj/lang/JoinPoint$StaticPart;
    //   56: invokevirtual 83    com/foo/aspect/EventDispatcherAspect:ajc$after$com_foo_aspect_EventDispatcherAspect$1$5b3bc9fd    (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
    //   59: aload_0
    //   60: athrow
    //   61: invokestatic 77    com/foo/aspect/EventDispatcherAspect:aspectOf    ()Lcom/foo/aspect/EventDispatcherAspect;
    //   64: getstatic 79    com/foo/listener/MyListener1:ajc$tjp_0    Lorg/aspectj/lang/JoinPoint$StaticPart;
    //   67: invokevirtual 83    com/foo/aspect/EventDispatcherAspect:ajc$after$com_foo_aspect_EventDispatcherAspect$1$5b3bc9fd    (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
    //   70: return
    //
    // Exception table:
    //   from    to    target    type
    //   33    36    36    java/lang/Throwable
  }

Regards,
Mohammad
--------------------------
Sun Certified Web Developer
ExpertsExchange Certified, Master: http://www.experts-exchange.com/M_1938796.html
Have a look at some pictures @ http://pixelshot.wordpress.com/
Do you like to read, see http://brainable.blogspot.com/
For the Persians see http://fekre-motefavet.blogspot.com/
English Forum:http://n2.nabble.com/English-Phrase-Finder-For-Persians-f3274251.html




On Tue, Apr 27, 2010 at 7:33 PM, Simone Gianni <simoneg@xxxxxxxxxx> wrote:
Hi Mohammad,
staticinitialization has no target object because when a class is initialized there is no instance yet. Probably you can obtain the class and other informations using ThisJoinPointStaticPart inside your advice.

    pointcut observerMethods():
        staticinitialization(@Observer com..*);

   after(): observerMethods() {
        InitializerSignature initsig = (InitializerSignature)ThisJoinPointStaticPart.getSignature();
        Class klass = initsig.getDeclaringType();
        // adding 'klass' into Registry
   }

See http://www.eclipse.org/aspectj/doc/released/runtime-api/index.html for more info.

Simone

2010/4/27 Mohammad Norouzi <mnrz57@xxxxxxxxx>
Hello
I want to register those classes annotated with @Observer in a Registry class... I want this occurs in a static block of such classes:

    pointcut observerMethods(Class klass):
        staticinitialization(@Observer com..*)
        && target(klass);

   after(Class klass): observerMethods(klass) {
        // adding 'klass' into Registry

   }

but as I read in manual it is said staticinitialization has no target object... is this right? if yes, how can I obtain the Class of those classes. Can I declare a static-block for matching classes?

thanks
 
Regards,
Mohammad
--------------------------
Sun Certified Web Developer
Have a look at some pictures @ http://pixelshot.wordpress.com/



_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users



_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users



Back to the top