[英]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.