2016-01-01 24 views
0

確定局部變量的名字我是新AspectJ和我嘗試這樣做:AspectJ中

可以說我有2個對象: var_obj1var_obj2

它們是相同類型的:MyObject

在我的方面,我在MyObjecttoString()方法上使用around()建議。 我想返回對象變量名

例如,如果我呼籲var_obj1toString(),這種方法(在方面)應該返回:「你好,從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; 
} 

回答

1

你想達到什麼是不可能使用AspectJ。首先,因爲沒有pointcut expression來挑選方法執行(或者說方法調用)基於訪問局部變量的聯接點。除此之外,您不應該根據命名甚至是使用局部變量來構建應用程序邏輯,也可以在不使用局部變量的情況下調用方法。請看下面的例子:使用

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

toString()兩個完全有效的調用,但沒有局部變量。