在AspectJ中确定局部变量名



我是AspectJ的新手,我尝试这样做:

假设我有两个对象:var_obj1var_obj2

它们属于同一类型:MyObject

在我的方面,我在MyObject上使用关于toString()方法的around()建议。我想返回对象变量名

例如,如果我在var_obj1上调用toString(),这个方法(在方面)应该返回:"hello from var_obj1"。

如果我在var_obj2上调用toString(),这个方法(在方面)应该返回:"hello from var_obj2"。

这应该在不将变量名保存在对象中的情况下完成。

我正在为此寻找一个AspectJ解决方案。

我当前的代码:

public static void main(String[] args) {
  MyObject var_obj1, var_obj2;
  var_obj1 = new MyObject();
  var_obj2 = new MyObject();
  System.out.println(var_obj1.toString());
  System.out.println(var_obj2.toString());
}

方面:

String around(): execution(String com.example.shapes.MyObject.toString()) {
  var object_var_name = ""; // here we need to put the variable object name
  return "hello from "+object_var_name;
}

您想要实现的是使用AspectJ是不可能的。首先,因为没有切入点表达式来挑选方法执行(或者更确切地说,方法调用)基于访问局部变量的连接点。除此之外,您不应该基于局部变量的命名甚至使用来构建应用程序逻辑,可以在根本不使用局部变量的情况下调用方法。考虑以下示例:

new MyObject().toString();
someOtherObject.getMyObject().toString();

这两个调用都是完全有效的toString(),但没有使用局部变量。

最新更新