Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] AW: Pointcut on a constructor with acustom@Annotation

That's the right idea, but I believe
 
  call( @MyAnnotation * *.new(..) )
 
results in a syntax error since "@MyAnnotation * *" is not a typepattern.
 
Wes
 
 
------------Original Message------------
From: Scott <aspectj-users@xxxxxxxxxxx>
To: aspectj-users@xxxxxxxxxxx
Date: Thu, Apr-20-2006 1:03 PM
Subject: Re: [aspectj-users] AW: Pointcut on a constructor with acustom@Annotation
Moritz,

Have you tried it this way yet?

@AfterReturning(pointcut = "call( @MyAnnotation * *.new(..) )", returning = "obj")
public void beforeConstructor(Object obj) {
   System.out.println(obj);
}

-Scott

=========================================

On 4/20/06, Moritz Post <moritzpost@xxxxxx> wrote:
Hello Ron

> Please take a look at this FAQ entry:
> http://www.eclipse.org/aspectj/doc/released/faq.html#q:adviseconstructors
>
> Basically, you can't use @target for the call to a constructor: there
> isn't
> one. You could use @target for execution of the constructor or you could
> bind the returned object with after returning advice and then use
> reflection
> to test for an annotation on the object.

If I was only concerned with the constructor, I could use an @AfterReturning
advise like the following to get the newly created object:

@AfterReturning(pointcut = "call(* .new(..))", returning = "obj")
public void beforeConstructor(Object obj) {
    System.out.println (obj);
}

This return the new object in the "obj" Object.

But my problem is the combination of the above with an @Annotation. The
pointcut should only kick in if the class has a specific annotation.

> Hallo Again
>
> Sorry, I hit send accidentally. :(
>
> > Hallo Mailingliste
> >
> > I am struggling to create a proper pointcut on a constructor. I want to
> > catch all creations of an object which is annotated with a custom
> > annotation. Like:
> >
> > @MyAnnotation
> > public class TheClass {
> >
> >   public TheClass {
> >   }
> >
> > }
> >
> > So whenever a classlass is instantiated I want to get the instance of
> that
> class (having the MyAnnotation annotation).
> > Therefore I developed the following Pointcut:
>
> So I continue here with the mentioned pointcut:
>
> @AfterReturning(pointcut = "call(* .new(..)) && @target(MyAnnotation)",
> returning = "obj")
>   public void objectCreation() {
>   }
>
> The problem here is, that the combination of the call(* .new(..)) and the
> @target(MyAnnotation) does not work. I can either remove the @target and
> it
> works fine or I can remove the call(..) and let the @target be the key.
> But
> together those two do not work.
>
> Am I doing something completely wrong? Or is there another suggested way
> to
> intercept a newly created object?
>
> Any help is appreciated
>
> Regards
> Moritz Post

Regards
Moritz Post

_______________________________________________
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