gpt4 book ai didi

java - 使用注释属性的方面切入点

转载 作者:行者123 更新时间:2023-12-02 05:42:45 26 4
gpt4 key购买 nike

有一个 TraceAspect 应该对使用 Trace 注释进行注释的任何方法或类(类的所有方法)执行一些日志记录。

@Aspect
public class TraceAspect {
@Pointcut("(@annotation(Trace) || @within(Trace)) && execution(* *(..))")
void allAnnotated(){}

@Around("allAnnotated()")
public Object trace(final ProceedingJoinPoint joinPoint) throws Throwable {
// doing some stuff here
}
}

和注释:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Trace {
boolean enabled() default true;
}

我需要修改切入点,以便跳过所有将 Trace.enabled 设置为 false 的方法/类(不被视为连接点)。

@Pointcut("allAnnotated() && Trace.enabled")

或者(如果不可能)至少在建议中包含该注释及其值,以便我可以检查属性并跳过日志记录...

最佳答案

看看 https://eclipse.org/aspectj/doc/released/README-160.html 中的“注释值匹配”

你能做的是:

@Pointcut("执行(@Trace(enabled=true) * *(..)) || 执行(* (@Trace(enabled=true) *).*(..))")

第一个是方法级别注释,第二个是类型级别注释。在 @annotation/@within 中嵌入值的语法尚不存在(因此您无法执行 @annotation(Trace(enabled=true))

关于java - 使用注释属性的方面切入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com