为什么下面的代码给我 "adviceDidNotMatch"

Why is the below code giving me "adviceDidNotMatch"

我正在努力学习 AspectJ,到目前为止,我已经很好地适应了这些概念。所以在这里我试图编写方面 class 以对对象进行验证。但是下面的代码给了我 adviceDidNotMatch 东西。

before(com.message.pojo.Entity entity) : call(*public com.message.helper.Processor.process(com.message.pojo.Entity))
     && args(entity)
        && target(com.message.helper.MessageProcessor){
        ValidationUtil validation = new ValidationUtil();
        validation.validate(entity);
    }

现在我检查的所有合格名称都是正确的。请查看我的 java 项目结构的屏幕截图。

[

你的切入点有一点语法问题:不是 call(* public,应该是 call(public *,然后就可以了。

顺便说一句,您还可以通过以本机 AspectJ 语法导入来替换完全限定的 class 名称。 FQDN 仅在 annotation-based @AspectJ 语法中是必需的。假设我们从您的屏幕截图中谈论 ValidationAspect,对于同一包中的两个 class,您甚至不需要任何导入。像这样尝试:

package com.message.helper;

import com.message.pojo.Entity;

public aspect ValidationAspect {
  before(Entity entity) :
    call(public * Processor.process(Entity)) &&
    args(entity) &&
    target(MessageProcessor)
  {
    ValidationUtil validation = new ValidationUtil();
    validation.validate(entity);
  }
}