Yes! Right :)
And there is no point in fiddling with proceedingJoinPoint.proceed(); when you use .aj files (as opposed to annotated-pojo-based), it's not wired to anything.
And the solution seems to be:
Object around() : get(@Annotation * *.*) {
try { Object theReturnValue = proceed();
// Do something here
return theReturnValue; } catch (Throwable e) { throw new RuntimeException("Something went wrong", e); } }
Greets Mirko
-----Ursprüngliche Nachricht----- Von: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] Im Auftrag von Sertic Mirko, Bedag Gesendet: Freitag, 19. Oktober 2012 13:13 An: aspectj-users@xxxxxxxxxxx Betreff: Re: [aspectj-users] Intercepting field access and thread-safety
Hi there again
This pointcut sounds right, but the aspect is not applied at all.
around() : get(@Annotation * *.*) -> Matches everything correctly, but no return value bound around(Object val) : get(@Annotation * *.*) && args(val) -> Matches nothing
I tried to fiddle with the proceedingJoinPoint.proceed() to get the field access return value, but this always returns null.
Any ideas?
Regards Mirko
-----Ursprüngliche Nachricht----- Von: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] Im Auftrag von Sertic Mirko, Bedag Gesendet: Freitag, 19. Oktober 2012 08:53 An: aspectj-users@xxxxxxxxxxx Betreff: Re: [aspectj-users] Intercepting field access and thread-safety
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 _______________________________________________ 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
|