如何从动态代理中解包原始对象

MRa*_*ser 9 java reflection proxy-classes dynamic-proxy

解包动态代理以检索下面的原始对象的最佳方法是什么?动态代理已使用创​​建java.lang.reflect.Proxy.newProxyInstance()

谢谢.

NPE*_*NPE 12

每个代理都InvocationHandler与之关联.只有InvocationHandler知道哪个对象(如果有的话)是代理的基础.如果你控制代理的创建,那么你可以提供你自己的InvocationHandler,你将拥有你想要的额外功能(即能够披露底层对象.)如果你没有,那么我恐怕你出去了好运


iir*_*ekm 12

没有好的方法:Proxy.getInvocationHandler(proxy)返回处理程序,但问题是从处理程序中提取原始对象.如果你的处理程序是一个匿名类,提取原始对象的唯一方法是使用反射并从名为val $的字段中提取原始东西 - 非常难看的方法.更好的方法是使用getter创建非匿名处理程序类,然后执行以下操作:

((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
Run Code Online (Sandbox Code Playgroud)