Thanks now i got the idea. I had some misconceptions. Thanks Simone..
--- On Fri, 10/10/08, Simone Gianni <simoneg@xxxxxxxxxx> wrote:
From: Simone Gianni <simoneg@xxxxxxxxxx> Subject: Re: [aspectj-users] Logging variables To: rashid_m180@xxxxxxxxx, aspectj-users@xxxxxxxxxxx Date: Friday, October 10, 2008, 7:12 AM
Hi Rashid, you should have a look at the complete list of pointcuts in AspectJ and relative join points [1]. Access (both in read and write) to a member variable IS a join point, and can be intercepted using the get() and set() pointcuts [2], while calling a getter and setter is a method call, so it IS a join point and can be matched both with execution() and call() pointcuts
[2].
Assignment and read of a local variable is not a join point, so cannot be intercepted by any pointcut. This is because variables internal to a method may exist only in code, and can be completely removed by the compiler, their name is not retained in the class file, and more generally is a bad idea to anchor your logic to an internal variable.
In you case, like A obj = new B(); you can intercept the call to new B() (as it is a method/constructor call) using the execution() and the call() pointcuts. [3] Using an after advice you can modify properties of the newly created B instance, and using an around advice you can even return another class (as long as it is a subclass of B)
Hope this helps, Simone
[1] Join points : http://www.eclipse.org/aspectj/doc/released/progguide/semantics-joinPoints.html [2] get() and set(), call() and execution()
: http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html#primitive-pointcuts [3] constructors : http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html#type-patterns (the last section)
Rashid Mahmood wrote: > Thanks Jochen. > > By Late binding means dynamic binding like > A obj = new B(); > > So there is no possibility to weave local variables assignments with > AspectJ. > > And for member variables, Advicing Setter method is the only way? > > --- On *Fri, 10/10/08, Jochen Wuttke /<jochen.wuttke@xxxxxx>/* wrote: > > From: Jochen Wuttke <jochen.wuttke@xxxxxx> > Subject: Re: [aspectj-users] Logging variables > To: aspectj-users@xxxxxxxxxxx > Date: Friday, October 10, 2008, 6:32 AM > > On Oct 10, 2008, at 2:41 PM, rmahmood
wrote: > > > > > Hi All, > > > > i am looking for some way to weave variable assignment statements. > >>> From different > discussions it seems that the only possibility is > to > > advice Setter methods for member variable assignment. > > > > But what about local variables within a method or assignment to > > a variable by a method return value. > > > > For assignments with late bindings it looks that this is not possible > > with AspectJ as it provides load time weaving. > > I'm not sure what you mean by "late bindings". But the problem > with AJ > is, AFAIK, that the names of local variables are not stored in class > files, i.e. they are not available for weaving. Instead the Java > compiler
assigns them numbers (which show up in the class file for > LOAD instructions), but since there is no mapping between these > numbers and the named variables in the source that the AspectJ weaver
> has access to, it is not possible to weave into local variable > accesses. > > Jochen > _______________________________________________ > 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 >
-- Simone Gianni CEO Semeru s.r.l. Apache
Committer MALE human being programming a computer http://www.simonegianni.it/
|