> I think what I am looking for should be achievable
Well, then why did you not achieve it yet? 😉
An if() pointcut in annotation-style syntax needs to be a static method, see here:
https://www.eclipse.org/aspectj/doc/next/adk15notebook/ataspectj-pcadvice.html#d0e3697
You also cannot just add an aspect instance argument, just because you dream about doing so.
Alex Rojkov schrieb am 07.09.2022 18:31 (GMT +02:00):
Thanks for the answer Alexander,I think what I am looking for should be achievable - at least judging from the code generated for the advice.A reference to the instance of the Aspect is available in the call site of the isActive() method.So that means to me that1. isActive() can be an instance method ( I admit there are use-cases where it must be static )2. when if() accepts an argument with a type of the Aspect type ( e.g. isActive(FooAspect aspect)) - instance of the Aspect can be resolved.Thanks,Alex
On Wed, Sep 7, 2022 at 8:44 AM Alexander Kriegisch <alexan...@kriegisch.name> wrote:_______________________________________________Hi Alex.
Your question is about Spring AOP rather than native AspectJ. Anyway, AFAIK you cannot inject a Spring bean into a static field, but of course you also cannot access an instance field from a static 'if()' method without some means to fetch a reference to the instance you wish to access. So if you think that an `if()` pointcut looks prettier than a condition at the beginning of an advice method, you are going to have to live with calling 'aspectOf()'.
Kind regards
Alex Rojkov schrieb am 06.09.2022 05:11 (GMT +02:00):
I have an Aspect that defines @Around advice.@Aspectclass FooAspect {@spring.Autowired Env env;@Around(some())public Object advice(String name) {return env.get(name);}}I'd like this Aspect to execute when env is not null and delegate to JoinPoint when it is null.@Around(some())public Object advice(String name, ProceedingJointPoint pjp) {if (env != null) {return env.get(name);elsereturn pjp.proceed();}However, I'd like to avoid cluttering the advice and do something like this instead.@Pointcut("if()")public static boolean isActive(FooAspect aspect) {return aspect.env != null;}@Around(isActive() && some())public Object advice(String name, ProceedingJointPoint pjp) {return env.get(name);}Question: is there a way to pass the instance of the advice to the isActive() pointcut?I'd like to avoid using Aspects.aspectOf() to get hold of the instance.Thanks,Alex
aspectj-users mailing list
aspectj-users@eclipse.org
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/aspectj-users