簡體   English   中英

如何在采用 arguments 的構造函數上使用動態代理?

[英]How can I use a dynamic proxy on constructors that take arguments?

我嘗試使用 Sun 在其 代理使用頁面上發布的代碼,並嘗試使用 DebugProxy 打印調用了哪個方法。 問題是,我正在為其創建代理的 object 需要有一個參數。 如果我嘗試使用構造函數的參數創建代理,我會收到以下錯誤:

Exception in thread "main" java.lang.ClassCastException: $Proxy0 cannot be cast to myPackage.myClass

我這樣創建了代理:


MyClass mc = (MyClass) DebugProxy.newInstance(new MyClass(props));

我怎樣才能創建一個代理實例,並仍然調用正確的構造函數?

JDK 生成的代理與您代理的 object 類型不同。 相反,它實現了與目標 object 相同的接口。您需要轉換為其中一種接口類型。

如果您查看鏈接到的頁面上的示例,它會轉換為 Foo,而不是 FooImpl。

您的 class 是否實現了您要測試的某些接口? 代理類僅實現接口中的方法。 如果您想在 class 的每個方法之前/之后打印(無論是用於度量還是調試),我建議使用面向方面的編程 (AOP)。 我自己從未做過,但我聽說AspectJ是您想要的。

public interface SomeInterface {
    public void someMethod();
}

public MyClass implements SomeInterface {
...
}

// DebugProxy doesn't return your class, but a class which implements all of the interfaces
// you class implements
SomeInterface mc = (SomeInterface ) DebugProxy.newInstance(new MyClass(props));

當你想創建一個代理時,你需要提供一個接口來實現。 不是具體的 class。

接口不描述構造函數,所以你想做的事情不是立即可行的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM