使用来自建议 Aspectj 的参数变量

Using an parameter variable from an advice Aspectj

我正在制作地址簿应用程序,我是 aspectj 的新手,我正在尝试在方面内使用变量 int,但 eclipse 说它“无法解析为变量”。

我需要做什么才能使用这个变量?感谢您能给我的任何帮助。

Aspect
before(): execution(* *.deleteAddress(int <--PARAMETER I WANT TO USE))
    {
        fileServices.addXMLToFile(fileServices.makeXML(FileServices.map.get(WHERE I WANT TO PUT THE PARAMETER)), FileServices.ProductionFileName);
    }

这是代码,如果有帮助的话

public void deleteAddress(int keyNumber) throws Exception
{
    Address oldAddress = map.get(keyNumber);
    map.remove(keyNumber);
    addXMLToFile(makeXML(oldAddress), BackupFileName);
    
}

您需要使用 args() 才能将位置参数绑定到建议方法参数。

  • Spring manual 解释说 Spring AOP(技术上不同,但与 AspectJ 共享语法子集),但它们的语法对于初学者来说相当不寻常,指的是定义的切入点在另一个 class.
  • 最好阅读 AspectJ manual,其中也对此进行了解释。我只是注意到您无论如何都使用本机 AspectJ 语法,这意味着 Spring AOP 不是您的主题。让我在 Spring AOP 用户的回答中留下参考。

在你的情况下,答案——现在再次使用原生 AspectJ 语法——将是(未经测试,只是发短信自由式):

before(int keyNumber) : execution(* *.deleteAddress(int)) && args(keyNumber) {
  fileServices.addXMLToFile(
    fileServices.makeXML(
      FileServices.map.get(keyNumber)
    ),
    FileServices.ProductionFileName
  );
}