BTW - I think it'd be good practice to exclude final fields from your advice, and possibly declare a warning when a final field is annotated with your marker annotation.
argg, yes, of course, you are right.
Regards Mirko
-----Ursprüngliche Nachricht----- Von: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] Im Auftrag von Romain MULLER Gesendet: Freitag, 19. Oktober 2012 08:14 An: aspectj-users@xxxxxxxxxxx Betreff: Re: [aspectj-users] Intercepting field access and thread-safety
You'll want to use:
around(Object val) : get(@Annotation * *.*) && args(val) {...}
_________________________ Sent over RFC-1149 compliant transport - please excuse occasionnal packet loss
Le 19 oct. 2012 à 08:09, "Sertic Mirko, Bedag" <Mirko.Sertic@xxxxxxxx> a écrit :
Hi Andy
No problem, and yes, this is exactly what i want. I didn't know that it is possible to use an around advice with field get access. Thank you. What would be the pointcut for every field get access, regardless of the field type? I need to pass also the original value of the field, so i can change it in advice.
I think the _expression_ would be:
get(@MyAnnotation * *.*)
but how do i pass original value?
Regards Mirko
-----Ursprüngliche Nachricht----- Von: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] Im Auftrag von Andy Clement Gesendet: Freitag, 19. Oktober 2012 04:53 An: aspectj-users@xxxxxxxxxxx Betreff: Re: [aspectj-users] Intercepting field access and thread-safety
Hi,
Sorry for the late reply, we are all at Spring One 2GX. How about:
public class Code { int i = 5; public static void main(String[] argv) { new Code().foo(); } public void foo() { System.out.println(i); } }
aspect X { int around(): get(int Code.i) { return 42; } }
Does that do what you want?
Andy
On 16 October 2012 12:16, Sertic Mirko, Bedag <Mirko.Sertic@xxxxxxxx> wrote:
Hi there
I'd like to know if it's possible to incercept a get field access using AspectJ and modify the returned value.
Of course i could modify the field and set a new value using a before advice, but if the affected instance would be used in a multi threaded environment, this could lead to unwanted race conditions. So it is possible to intercept a field get access and return a defined value without modifying the original value of the field?
Thanks a lot
Mirko
_______________________________________________ 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
_______________________________________________ aspectj-users mailing list aspectj-users@xxxxxxxxxxx https://dev.eclipse.org/mailman/listinfo/aspectj-users
|