【问题标题】:Writing an aspectj pointcut for java.io.FileOutputStream为 java.io.FileOutputStream 编写 aspectj 切入点
【发布时间】:2022-01-14 12:22:28
【问题描述】:

我想为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);
    }

}

为了测试这个钩子是否起作用,我添加了一个打印语句。

但是,这似乎没有被调用。

不确定在这种情况下是什么错误。

【问题讨论】:

    标签: java aop aspectj


    【解决方案1】:

    问题是无效的构造函数调用语法。您需要使用.new 并且没有返回类型说明符,因为返回类型隐式始终是被拦截的构造函数的类。

    顺便说一句,注意不要将方法命名为类。最好使用带有小写“f”的fileOutputStream1 作为切入点名称。否则,您的代码很难阅读。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多