[英]Spring Boot 2 after aop annotation
我正在尝试创建一个 @after aop 注释以在方法完成后执行代码。 我在传递参数时遇到了问题。
方面代码 -
@Aspect
@Component
public class FinalAspect {
@Pointcut("@annotation(finalEvent)")
public void runFinalMethod() {}
@After("runFinalMethod()")
public void finalMethod(JoinPoint joinPoint, FinalEvent finalEvent) throws Throwable {
....
}
}
决赛 -
@Target({ElementType.Method})
@Retention(RetentionPolicy.RUNTIME)
public @interface FinalEvent {
String value() default "";
}
控制器 -
@FinalEvent(value = "test")
public ResponseEntity<String> getDetails() { ... }
这会引发错误:
引用的错误类型不是注释类型:finalEvent
但是如果我从 FinalEvent 接口中删除“value”属性并更改为 @annotation( F inalEvent),它就可以工作。 但我需要传递参数。
如果我修改为 @Pointcut("@annotation(com.aspect.finalEvent)") 那么它会在切入点中的 ::0 正式未绑定处引发错误。
我该如何解决这个问题?
以下代码将工作
@Aspect
@Component
public class FinalAspect {
@Pointcut("@annotation(finalEvent) && within(so.qn68380528.service..*)")
public void runFinalMethod(FinalEvent finalEvent) {}
@After("runFinalMethod(finalEvent)")
public void finalMethod(FinalEvent finalEvent) throws Throwable {
System.out.println(finalEvent.value());
}
}
请记住限制范围: https : //docs.spring.io/spring-framework/docs/current/reference/html/core.html#writing-good-pointcuts
您也可以通过@kriegaex 的这个答案来了解为什么@annotation
具有全局范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.