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

时间:2017-02-12 17:12:02

标签: java aop aspectj

我正在努力学习AspectJ,到目前为止,我已经习惯了这些概念。所以这里我试图在Object上编写用于验证的方面类。但是下面的代码给了我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项目结构的屏幕截图。

[Project Structure

1 个答案:

答案 0 :(得分:0)

您的切入点中存在一些语法问题:而不是call(* public它应该是call(public *,而是有效。

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

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);
  }
}