有一个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;
}
我需要修改切入点,以便跳过所有设置为false的Trace.enabled的方法/类(不被视为连接点)。
@Pointcut("allAnnotated() && Trace.enabled")
或(如果不可能)至少在建议中使用Annotation及其值,以便我可以检查属性并跳过记录...
答案 0 :(得分:2)
查看https://eclipse.org/aspectj/doc/released/README-160.html
中的'注释值匹配'你能做的是:
@Pointcut("execution(@Trace(enabled=true) * *(..)) || execution(* (@Trace(enabled=true) *).*(..))")
第一个是方法级别注释,第二个是类型级别注释。在@annotation / @中嵌入值的语法还没有(所以你不能做@annotation(Trace(enabled=true))