2011-09-23 36 views

回答

0

您可以使用反射來調用方法,但不能用它來截取方法調用。同樣,您可以使用Proxy類的動態調用處理程序創建代理,但不能攔截未針對代理的現有代碼。

所以答案是否定的。

0

它不能使用反射來完成,因爲它不提供對執行的任何控制。但你可以寫自己的agent。你需要儀器類,這可能會更容易使用像BCEL。它與Java框架和猶太教很相似。

1

您不能直接攔截現有方法的方法調用,而不會掛接到例如實例化邏輯。一種方法是將實例化邏輯分離成可以使用例如Proxy的工廠。

public class FooFactry() { 
    private InvocationHandler handler; 

    public FooFactory(InvocationHandler handler) { 
     this.handler = handler; 
    } 

    public Foo newInstance() { 
     return (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(), 
           new Class[] { Foo.class }, 
           handler); 
    } 
} 

您可以使用自定義InvocationHandler攔截上Foo發出的任何方法。您也可以創建自己的包裝來避免動態代理,class FooWrapper extends Foo{}可以實現相同的結果。

相關問題