6
votes

Pourquoi la méthode invoque-t-elle () dans InvocationHandler a-t-elle un proxy d'objet de paramètre?

Lorsque vous vérifiez que la méthode invoque (proxy d'objet, méthode de la méthode, objet [] args) Déclaration et la déclaration DOC, vous constaterez que le proxy de paramètre d'entrée

proxy - l'instance proxy selon laquelle la méthode a été invoquée sur

Quand je fais un test sur Java Dynamic Proxy, je trouve que ce proxy est produit par vm.so je souhaite savoir pourquoi la méthode invoquée a ce param, qui n'est sûrement rien sauf un objet ($ proxy0 ) Mais ne pas avoir l'action réelle pour notre utilisation?


1 commentaires

Je suis désolé, vous êtes peut-être mal compris ce que je veux exprimer. Je veux dire que le proxy fabriqué par VM n'est qu'un objet qui implémente toutes les interfaces dans la matrice d'interface (fournie dans la méthode proxy.newproxyinstace ()). Mais cet objet de proxy $ Il suffit de la méthode mais n'a pas la vraie action que nous voulons, car VM ne sais pas ce que nous voulons faire, n'est-ce pas?


3 Réponses :


5
votes

Ceci très utile si vous avez une poignée d'invocation unique pour plusieurs objets proxy. Vous pouvez donc utiliser une carte de hachage pour stocker des informations sur les états proxy. Par exemple - Historique des invocations de proxy du Frame-Framework Mokito Test Store.


1 commentaires

Merci, Alex.But pourriez-vous faire un détail sur cette déclaration, surtout sur la carte de hachage? Je pense que le gestionnaire est la vraie classe de proxy ou d'enveloppement pour envelopper la classe que nous fournissons pour faire la vraie affaires. Je suis raison?



1
votes

Si vous êtes chinois, vous pouvez lire cet article http://rejoy.iteye.com/blog/ 1627405

Il fait une décomplication de $ proxy0.class, vous devez savoir que $ proxy0 s'étend proxy xxx

et là est une fonction en $ proxy0: xxx


0 commentaires

0
votes

nous pouvons utiliser System.GetProperties () .Class CODE> Fichier, nous trouverons cette classe toutes les méthodes Java (à l'exception de la méthode native) sont invoquées par InvocationHandler P>

    public final boolean equals(Object var1) throws  {
        try {
            return (Boolean)super.h.invoke(this, m1, new Object[]{var1});
        } catch (RuntimeException | Error var3) {
            throw var3;
        } catch (Throwable var4) {
            throw new UndeclaredThrowableException(var4);
        }
    }

    public final String toString() throws  {
        try {
            return (String)super.h.invoke(this, m2, (Object[])null);
        } catch (RuntimeException | Error var2) {
            throw var2;
        } catch (Throwable var3) {
            throw new UndeclaredThrowableException(var3);
        }
    }


0 commentaires