IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Les proxy (utilite et fonctionnement?)


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut Les proxy (utilite et fonctionnement?)
    Bon lundi!
    Comme a chaque lundi j'ai ma petite question hehe.

    Tout d'abord je ne parle pas de la technologie utilise en reseautique

    Comme le titre l'indique je me questionne actuellement sur le fonctionnement du concept des proxy en java, je pige pas trop l'utilite et le fonctionnement. A ce que j'ai compris ce permetterais d'adopter une interface dynamiquement, mais disons que j'ai pas trop compris l'interet et sans pus le fonctionnement.

    Enfin bref, voici une classe test fournit avec le chapitre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    /**
       @version 1.00 2000-04-13
       @author Cay Horstmann
    */
     
    import java.lang.reflect.*;
    import java.util.*;
     
    public class ProxyTest
    {  
       public static void main(String[] args)
       {  
          Object[] elements = new Object[1000];
     
          // fill elements with proxies for the integers 1 ... 1000
          for (int i = 0; i < elements.length; i++)
          {
             Integer value = i + 1;
             Class[] interfaces = value.getClass().getInterfaces();
             InvocationHandler handler = new TraceHandler(value);
             Object proxy = Proxy.newProxyInstance(null,
                interfaces, handler);
             elements[i] = proxy;
          }
     
          // construct a random integer
          Integer key = new Random().nextInt(elements.length) + 1;
     
          // search for the key
          int result = Arrays.binarySearch(elements, key);
     
          // print match if found
          if (result >= 0) System.out.println(elements[result]);
       }
    }
     
    /**
       An invocation handler that prints out the method name
       and parameters, then invokes the original method
    */
    class TraceHandler implements InvocationHandler
    { 
       /**
          Constructs a TraceHandler
          @param t the implicit parameter of the method call
       */
       public TraceHandler(Object t)
       {  
          target = t;
       }
     
       public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
       {  
          // print implicit argument
          System.out.print(target);
          // print method name
          System.out.print("." + m.getName() + "(");
          // print explicit arguments
          if (args != null)
          {
             for (int i = 0; i < args.length; i++)
             {  
                System.out.print(args[i]);
                if (i < args.length - 1)
                   System.out.print(", ");
             }
          }
          System.out.println(")");
     
          // invoke actual method
          return m.invoke(target, args);
       }
     
       private Object target;
    }
    Ah j'oubliais ma question, en fait elle est plutot simple, si vous pourriez m'expliquer grossierement c'est quoi l'idee de ce truc et son interet sans trop vous casser la tete ca serait bien .

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Un Proxy permet de créer un objet implémentant une ou plusieurs interfaces de manière dynamique.

    Cela permet entre autres :
    • De proposer une implémentation complêtement dynamique, par rapport à des fichiers de configuration ou des annotations, comme ce sera le cas dans JDBC 4.0 (Lire : Mustang, JDBC 4.0 et les Annotations, même si les choses ont quelques peu évolué depuis cette article).
    • D'effectuer des traitements avant et/ou après l'exécution d'un méthode. Ainsi dans ton exemple, lorsqu'une des méthodes des interfaces de Integer (soit Comparable) est appellé, c'est la méthode invoke() de ton Handler qui est appellé en réalité. Et ce dernier peut affiche le nom de la méthode et ses paramètres avant de l'appeller réellement...
    • Tu peux carrément faire des Proxy qui se contente de logger les appels de méthodes, pratique pour débugger les evénéments de composants Swing (Par exemple : InvocationHandler)

    Bref l'idée c'est de rediriger les appels de méthodes vers la méthodes invoke(), afin d'y effectuer un traitement quelconque...

    a++

  3. #3
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    Okay, donc c'est plutot rare qu'on a besoin de ce genre de technique de programmation.

    Enfin bref un gros merci adiGuba!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les iterator et leur fonctionnement
    Par yan dans le forum SL & STL
    Réponses: 5
    Dernier message: 04/03/2008, 08h44
  2. les requetes INSERT ne fonctionnent pas
    Par Seb33300 dans le forum WebDev
    Réponses: 6
    Dernier message: 30/11/2007, 10h06
  3. Windev 5.5 et les proxy
    Par thinkandstart dans le forum WinDev
    Réponses: 1
    Dernier message: 28/06/2007, 17h02
  4. Question sur les Proxy
    Par Furius dans le forum Applications
    Réponses: 9
    Dernier message: 17/10/2005, 21h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo