gpt4 book ai didi

java - 方法参数aspectj在Spring Boot中不起作用

转载 作者:行者123 更新时间:2023-12-02 10:24:44 25 4
gpt4 key购买 nike

我创建了一个名为 Validation 的注释并注入(inject)方法参数,并且在调用之前我一直在使用方面来验证我的对象。它不起作用

注释代码

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Validation {}

Aop代码

@Aspect
@Component
public class ValidatorAOP {
@Before("valditionAnnotation()")
public void validate(final JoinPoint jp) throws Throwable {
Validator object = (Validator) jp.getTarget();
object.validator();
}
@Pointcut("@annotation(Validation)")
public void valditionAnnotation() {
}
}

使用注释作为public TrackingId createNewOrder(@Validation Order newOrder)

最佳答案

这在任何带有 @Validation 注释参数的方法之前调用,我认为这就是您想要的:

@Before("execution(* *(.., @Validation (*), ..)) && args(.., toVerify)")
public void validate(final JoinPoint joinPoint, final Object toVerify) {

}

如果您不需要参数值,只需删除 && ... 部分和方法参数即可。

@Before("execution(* *(.., @Validation (*), ..)) && args(.., toVerify)")
| | | | | | | | | | | |
1 2 3 4 5 6 7 8 9 10 11 12
  1. 在连接点之前调用的建议
  2. 匹配方法执行连接点
  3. 方法可见性,匹配任何(公共(public)、私有(private)等)
  4. 方法名称,匹配任意
  5. 如果您的参数不是唯一的,它可以位于其他参数之间(未使用 @Validation 进行注释)
  6. 您要查找的注释
  7. 注释参数的类型
  8. 参见 5。
  9. 组合表达式
  10. 使参数可用于您的方法
  11. 与 5 和 8 一样,它可能不是第一个参数
  12. 参数名称,与方法签名中的相同(Object toVerify)

如果您的方法具有多个参数,有些带注释,有些没有,以及其他组合,请小心 - 不确定它是否总是有效。

关于java - 方法参数aspectj在Spring Boot中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54051751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com