繁体   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