簡體   English   中英

aop注解后的Spring Boot 2

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM