方法参数 aspectj 不工作 spring 启动

method parameter aspectj is not working spring boot

我创建了一个名称为 Validation 的注解并在方法参数上注入,并且我一直在调用前使用 aspect 来验证我的对象。它不工作

注释代码

@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. 匹配方式执行连接点
  4. 方法可见性,匹配任何(public,私有等)
  5. 方法名,匹配任意
  6. 如果你的论点不是唯一的,它可以在其他论点之间(没有用 @Validation 注释)
  7. 您要查找的注释
  8. 注释的参数类型
  9. 见 5.
  10. 组合表达式
  11. 使参数可用到你的方法
  12. 如5和8,可能不是第一个参数
  13. 参数名称,与方法签名相同 (Object toVerify)

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