Skip to main content

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

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



Back to the top