Как развернуть оригинальный объект из динамического прокси - PullRequest
8 голосов
/ 10 декабря 2010

Каков наилучший подход для развертывания динамического прокси-сервера для извлечения исходного объекта под ним?Динамический прокси был создан с использованием java.lang.reflect.Proxy.newProxyInstance()

Спасибо.

Ответы [ 3 ]

11 голосов
/ 10 декабря 2010

Нет хорошего метода: Proxy.getInvocationHandler (proxy) возвращает обработчик, но проблема в том, чтобы извлечь исходный объект из обработчика.Если ваш обработчик является анонимным классом, единственный способ извлечь исходный объект - это использовать отражение и извлечь оригинал из поля с именем val $ something - очень уродливый метод.Лучше создать класс неанонимного обработчика с помощью метода get, тогда вы сделаете:

((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
11 голосов
/ 10 декабря 2010

Каждый прокси имеет InvocationHandler, связанный с ним. Только InvocationHandler знает, какой объект (, если есть * ) лежит в основе прокси. Если вы контролируете создание прокси-сервера, то вы можете предоставить свой собственный InvocationHandler, который будет иметь дополнительные функциональные возможности, которые вы желаете (т.е. сможете раскрыть базовый объект.) Если вы этого не сделаете, то я боюсь, что вы вам не повезло.

2 голосов
/ 10 декабря 2010

Вы можете использовать метод Proxy.getInvocationHandler (proxy) для получения исходного InvocationHandler.

...