如何从动态代理中解包原始对象
解包动态代理以检索下面的原始对象的最佳方法是什么? 使用java.lang.reflect.Proxy.newProxyInstance()
创建了动态代理
谢谢。
每个代理都有一个与之关联的InvocationHandler
。 只有InvocationHandler
知道代理所依赖的对象( 如果有 )。 如果你控制代理的创建,那么你可以提供你自己的InvocationHandler
,它将具有你想要的额外function(即能够透露底层对象。)如果你没有,那么我恐怕你是运气不好。
没有好的方法:Proxy.getInvocationHandler(proxy)返回处理程序,但问题是从处理程序中提取原始对象。 如果你的处理程序是一个匿名类,提取原始对象的唯一方法是使用reflection并从名为val $的字段中提取原始东西 – 非常难看的方法。 更好的方法是使用getter创建非匿名处理程序类,然后执行以下操作:
((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
您可以使用Proxy.getInvocationHandler(proxy)方法获取原始InvocationHandler。