[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
AW: [aspectj-users] AW: Pointcut on a constructor withacustom@Annotation
|
Hello Again
First let me add, that I am happy that so many people have contributed to my problem. Thanks ☺
Here is what made it work in the end. Tipp by Wes :). thx
@AfterReturning(pointcut = "call((@MyAnnotation *).new(..))", returning = "obj")
public void newObject(JoinPoint joinPoint, Object obj) {
System.out.println(joinPoint);
System.out.println(obj);
}
The ajdt displays a warning on the newObject method though.
"can not build thisJoinPoint lazily for this advice since it has no suitable guard."
Is this something I have to worry about?
Greets Moritz Post
________________________________________
Von: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] Im Auftrag von Wes
Gesendet: Donnerstag, 20. April 2006 22:14
An: aspectj-users@xxxxxxxxxxx
Betreff: Re: [aspectj-users] AW: Pointcut on a constructor withacustom@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