在AspectJ

时间:2016-01-01 16:28:25

标签: variables object aspectj

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

让我说我有两个对象: var_obj1var_obj2

它们属于同一类型:MyObject

就我而言,我在around()上的toString()方法上使用MyObject建议。 我想返回对象变量名称

例如,如果我在toString()上调用var_obj1,则此方法(在方面上)应返回:“hello from var_obj1”。

如果我在toString()上调用var_obj2,则此方法(在方面上)应返回:“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;
}

1 个答案:

答案 0 :(得分:1)

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

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

toString()完全有效的调用,但没有使用局部变量。