Quelle est la meilleure approche pour déballer un proxy dynamique pour récupérer l'objet d'origine en dessous?
Le proxy dynamique a été créé en utilisant merci. p> java.lang.reflect.proxy.newproxyinstance () code> p>
3 Réponses :
Chaque proxy a un InvocationHandler code>
associé à celui-ci. Seuls le InvocationHandler code> sait quel objet ( si un fort>) sous-tend le proxy. Si vous contrôlez la création du proxy, vous pouvez alors fournir votre propre invocation
InvocationHandler code> qui aura la fonctionnalité supplémentaire que vous désirez (c'est-à-dire pour pouvoir divulguer l'objet sous-jacent.) Si vous ne le faites pas, Ensuite, j'ai peur que vous n'ayez pas de chance. P>
Vous pouvez utiliser la méthode proxy.getinVocationHandler (proxy) pour obtenir l'invocation d'origineHandler. P>
Ce n'est pas l'objet emballé.
Il n'y a pas de bonne méthode: proxy.getinVocationHandler (proxy) renvoie le gestionnaire, mais le problème consiste à extraire l'objet d'origine du gestionnaire. Si votre gestionnaire est une classe anonyme, le seul moyen d'extraire l'objet d'origine consiste à utiliser la réflexion et à extraire l'original de champ nommé Val $ quelque chose - méthode très laid. Un meilleur moyen est de créer une classe de manutention non anonyme avec un getter, puis vous faites:
((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
Cela dépend de la façon dont vous l'avez créée. Quelle bibliothèque? le proxy JDK? Ou cglib / javassist?
@Bozho: J'ai mis à jour la question pour être plus précise
Cela suppose qu'il y a un objet original. Qu'est-ce que
InvocationHandler code> est envoyé à
newproxyinstance () code>?
J'ai trouvé très utile Cette réponse sur un autre message . En outre, cette question est une quasi-dupliquée et il serait bon de fusionner les suggestions dans les deux IMHO