我可以在 aop java 中声明围绕建议本身的建议吗?
Can I declare advice for surrounding an advice itself in aop java?
我做了一个注释(@MethodLogger)并在上面写了一个方面,它基本上记录了方法的时间并继续存储它。所以在我放置该注释的任何方法上它都可以正常工作
但在一个特殊的用例中,我需要监控一个建议本身:
例如:
@MethodLogger
@Around("some function specified")
public Object method(ProceedingJoinPoint pjp) throws Throwable{
// code here
}
但是这个东西不行。它从不调用我的注释方面。
这在 Spring AOP 中不起作用,documented here:
Advising aspects with other aspects?
In Spring AOP, it is not possible to have aspects themselves be the target of advice from other aspects. The @Aspect
annotation on a class marks it as an aspect, and hence excludes it from auto-proxying.
如果要执行此操作,您需要在 Spring 中激活完整的 AspectJ via LTW。如果您知道它们的方法名称,那么您可以直接定位建议。如果您通常希望将切入点匹配限制为建议执行或通过 !adviceexecution()
从匹配中排除后者,甚至还有一个特殊的切入点指示符 adviceexecution()
。有关详细信息,请查看 AspectJ 文档。
我做了一个注释(@MethodLogger)并在上面写了一个方面,它基本上记录了方法的时间并继续存储它。所以在我放置该注释的任何方法上它都可以正常工作 但在一个特殊的用例中,我需要监控一个建议本身:
例如:
@MethodLogger
@Around("some function specified")
public Object method(ProceedingJoinPoint pjp) throws Throwable{
// code here
}
但是这个东西不行。它从不调用我的注释方面。
这在 Spring AOP 中不起作用,documented here:
Advising aspects with other aspects?
In Spring AOP, it is not possible to have aspects themselves be the target of advice from other aspects. The
@Aspect
annotation on a class marks it as an aspect, and hence excludes it from auto-proxying.
如果要执行此操作,您需要在 Spring 中激活完整的 AspectJ via LTW。如果您知道它们的方法名称,那么您可以直接定位建议。如果您通常希望将切入点匹配限制为建议执行或通过 !adviceexecution()
从匹配中排除后者,甚至还有一个特殊的切入点指示符 adviceexecution()
。有关详细信息,请查看 AspectJ 文档。