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

Unless I'm mistaken,

call( @MyAnnotation * *.new(..) )

is okay; it matches constructors annotated with @MyAnnotation, while

call( * (@MyAnnotation *).new(..) )

Matches constructors in classes where the class has the annotation.

dean

On 4/20/06, Wes <wes@xxxxxxxxxxxxxx> wrote:
>
> 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@AnnotationMoritz,
>
> 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
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
>


--
Dean Wampler
http://www.aspectprogramming.com
http://www.newaspects.com
http://www.contract4j.org


Back to the top