使用来自建议 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
);
}
我正在制作地址簿应用程序,我是 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
);
}