2014-02-06 58 views
0

主題名稱可能不好。我試圖解釋清晰度。如何在方面調用掛鉤類的方法?

我有類:

public class A(){ 
    Field1 field1; 
    Field2 field2; 
    public void method1(){...} 
    public void method2(){...} 
    public void sourceMethod(ParameterClass parameter1){ 
    //some code 
    method1(); 
    //some code 
     method2(); 
    //some cdoe 
    } 
} 

我將鉤源法: ...

@Around(value = "execution(* A.sourceMethod(ParameterClass))") 
    public void aroundSourceMethod(JoinPoint joinPoint){ 
     //I need to write my realization sourceMethod here 
     // I want to invoke method1 and method2 here 
} 

在這裏,我要重寫所有的代碼。但我需要調用method1()method2()

是否可能使用AspectJ?

+0

你想達到什麼目的?你想在調用sourceMethod()之前執行'method1()'和'method2()'方法嗎?通過寫一個'@ Around'的建議?在這種情況下,爲什麼不使用'@ Before'。另外,aspectJ只會提供一個攔截機制。調用必須通過反射來實現。這與AspectJ – Hrishikesh

+0

無關,這種方法寫得不好。我需要完全重寫 – gstackoverflow

+0

但是,如果您正在編寫方法的周圍,那麼不會從未執行的方法轉義。你可能會最終執行兩次'method1()'和'method2()'。因爲,即使你的程序編入了方面,你的程序實際上也會進入'sourceMethod()'。 – Hrishikesh

回答

1
@Around(value = "execution(* A.sourceMethod(Parameter)) && target(target)") 
public void aroundSourceMethod(JoinPoint joinPoint, Object target){ 
    // I need to write my realization sourceMethod here 
    // I want to invoke method1 and method2 here 
} 

目標將包含執行sourceMethod的對象。既然你只能勸A.sourceMethod(),你可以認爲它是A型的,它轉換爲是和調用它的方法,只要你喜歡:

((A) target).method1() 
... 

它不漂亮,但它應該工作。