我第一次使用java.util.concurrency
框架。這是我正在做的一個非常簡化的版本。對於那些不熟悉該框架的人,future.get()
執行將來定義的對象Callable
。 future.getOriginatingRequest()
返回一個我將來設置的對象,供Callable
對象使用,我只是試圖記錄哪個始發請求對象失敗(它足以知道它的類名)。如何獲取代理類的名稱?
try {
future.get();
} catch (ExecutionException e) {
logger.error("Failed to execute future with id '" +
future.getOriginatingRequest().getClass().getName() + "'");
}
我遇到的問題是,日誌框架輸出這樣的:
Failed to execute future with id '$Proxy22'
因此而不是真正的類名我得到$Proxy22
或其他一些數字。有沒有辦法獲得真實的類名而不是代理名?積分是有人可以清楚地解釋爲什麼我首先得到代理字符串!
感謝。任何想法爲什麼一個代理類參與?他們是爲了什麼?畢竟我在未來(我自己創建的)上設置了始發請求對象,並且只是試圖恢復它。 –
@Chris Knight你使用RMI還是類似的東西? – josefx
@Chris Knight使用代理可能有幾個原因,但它通常涉及在每個方法調用之前和/或之後執行的操作(例如訪問檢查)或能夠操作(或替換)沒有任何人注意到它的底層對象。但是動態代理非常強大且多功能,所以它可能是完全不同的東西。 – biziclop