我想为new FileInputstream(File file)
构造函数编写一个切入点。例如在java中创建新文件的一种常见方法是:
File file = new File(myDirectory, "myFileName.txt");
new FileOutputStream(file);
到目前为止,我尝试过的是:
内部FileCreation.aj
:
import java.io.File;
import java.io.FileOutputStream;
aspect FileCreation {
pointcut FileOutputStream1(File file): call(FileOutputStream FileOutputStream(File)) && args(file);
FileOutputStream around(File file): FileOutputStream1(file) {
System.out.println("I was called!!");
return proceed(file);
}
}
为了测试这个钩子是否工作,我添加了一个print语句。
然而,这似乎并没有被调用。
不确定这种情况下的错误是什么。
问题是构造函数调用语法无效。您需要使用.new
,并且不使用返回类型说明符,因为返回类型隐式地始终是截获的构造函数的类。
顺便说一句,注意不要给类之类的方法命名。更好地使用小写的CCD_ 4;f";作为切入点名称。否则,您的代码很难阅读。
package de.scrum_master.aspect;
import java.io.File;
import java.io.FileOutputStream;
aspect FileCreation {
pointcut fileOutputStream1(File file) :
call(FileOutputStream.new(File)) &&
args(file);
FileOutputStream around(File file) : fileOutputStream1(file) {
System.out.println("I was called!!");
return proceed(file);
}
}