2010-12-10 19 views
5

¿cuál es el mejor enfoque para desenvolver un proxy dinámico para recuperar el objeto original? El proxy dinámico se ha creado usando java.lang.reflect.Proxy.newProxyInstance()Cómo desenvolver el objeto original de un proxy dinámico

Gracias.

+0

que depende de cómo se haya creado. ¿Qué biblioteca? el proxy JDK? ¿O CGLIB/Javassist? – Bozho

+0

@Bozho: He actualizado la pregunta para ser más preciso – MRalwasser

+0

Esto supone que hay un objeto original. ¿Qué 'InvocationHandler' se envía a' newProxyInstance() '? –

Respuesta

8

Cada proxy tiene asociado un InvocationHandler. Solo el InvocationHandler sabe qué objeto (si alguno) subyace en el proxy. Si controla la creación del proxy, puede proporcionar su propio InvocationHandler que tendrá la funcionalidad adicional que desee (es decir, podrá revelar el objeto subyacente). Si no lo hace, entonces me temo que está sin suerte.

1

Puede usar el método Proxy.getInvocationHandler (proxy) para obtener el InvocationHandler original.

+4

Ese no es el objeto envuelto. –

8

No hay un buen método: Proxy.getInvocationHandler (proxy) devuelve el controlador, pero el problema es extraer el objeto original del controlador. Si su manejador es una clase anónima, la única forma de extraer el objeto original es usar el reflejo y extraer el original del campo denominado val $ something: método muy feo. mejor manera es crear clase de controlador no anónima con un captador, entonces lo haces:

((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject() 
Cuestiones relacionadas