解包动态代理以检索下方原始对象的最佳方法是什么?
已使用java.lang.reflect.Proxy.newProxyInstance()
谢谢。
答案 0 :(得分:11)
每个代理都有InvocationHandler
与之关联。只有InvocationHandler
知道代理所依赖的对象(,如果有的话)。如果您控制代理的创建,那么您可以提供自己的InvocationHandler
,它将具有您想要的额外功能(即能够披露基础对象。)如果您不这样做,那么我就是害怕你运气不好。
答案 1 :(得分:11)
没有好的方法:Proxy.getInvocationHandler(proxy)返回处理程序,但问题是从处理程序中提取原始对象。如果你的处理程序是一个匿名类,提取原始对象的唯一方法是使用反射并从名为val $的字段中提取原始东西 - 非常难看的方法。 更好的方法是使用getter创建非匿名处理程序类,然后执行:
((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
答案 2 :(得分:2)
您可以使用Proxy.getInvocationHandler(proxy)方法获取原始的InvocationHandler。