我是AspectJ的新手,我尝试这样做:
让我说我有两个对象:
var_obj1
,var_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;
}
答案 0 :(得分:1)
您希望通过AspectJ实现不可能。首先,因为没有pointcut expression来挑选连接点,其中方法执行(或者更确切地说方法调用)基于访问局部变量。除此之外,您不应该基于命名甚至使用局部变量来构建应用程序逻辑,可以在不使用局部变量的情况下调用方法。请考虑以下示例:
new MyObject().toString();
someOtherObject.getMyObject().toString();
toString()
完全有效的调用,但没有使用局部变量。