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

Java Discussion :

Question sur URLClassLoader


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Par défaut Question sur URLClassLoader
    Bonjour,

    Je m'intéresse aux classLoader. Je souhaiterais charger une classe java contenu dans un répertoire, pour cela j'utilise la classe URLClassLoader.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Main{
     
    public static main(String[] arg){
     
    URLClassLoader cl = new URLClassLoader(new URL[]{new URL{“file:///test.jar”)});
     
    Class c = cl.loadCLass(“test.Toto”);
     
    Object s=c.newInstance();
     
    }
    }
    Ma classe Toto possède une méthode "myMethod". Je n'arrive pas à comprendre l'utilité de cette pratique car en chargeant dynamiquement la classe, je ne peux pas accéder à "myMethod" depuis la classe Main (s.myMethod). Dois-je déclarer une interface ?


    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Par défaut
    Dois-je déclarer une interface ?
    Non. Ta variable s est de type Object, donc elle n'a accès qu'aux méthodes d'Object. Tu dois caster Object en Toto pour pouvoir appeler des méthodes dessus.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour,

    Regarde déjà les méthodes de la classe 'Class" (ggetDeclaredMethod(() en particulier) et de la classe "java.land.recflect.Method' dans la javadoc.
    Lis aussi la doc (ou des articles ou tutoriaux sur la réflexion java et tu trouvera ton bonheur.

    Par contre, si c'est pour une application dans la vie réelle, je te conseille de n'utiliser ce fonctionnement que si c'est vraiment nécessaire. En effet, ça do nne un code compliqué à lire et à maintenir et sa a des chances de dégrader les performances par rapport à des appels de classes "connues".

    Ce genre de mécanismes n'est vraiment utile, à mon sens que pour réaliser des plugins ou des applications pratiquant l'injection de code et l'inversion de contrôle comme pas mal de framework (spring, struts etc.)

    Cordialement

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par xps1616 Voir le message
    Dois-je déclarer une interface ?
    C'est en général comme ça qu'on fait, oui. L'interface fait partie de ton programme qui démarre normalement, et la classe que tu charges avec le classLoader implémente cette interface.

    En faisant ainsi, tu peux caster les instances de cette classe, en l'interface en question, et ainsi appeler ses méthodes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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,

    Citation Envoyé par xps1616 Voir le message
    Ma classe Toto possède une méthode "myMethod". Je n'arrive pas à comprendre l'utilité de cette pratique car en chargeant dynamiquement la classe, je ne peux pas accéder à "myMethod" depuis la classe Main (s.myMethod). Dois-je déclarer une interface ?
    Oui il est préférable de définir une interface, qui elle sera chargé de manière classique.
    Sinon tu peux passer par la reflection pour appeler la méthode, mais cela risque d'être très lourd à écrire...


    Quel est l'objectif de tout cela ?


    a++

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Par défaut
    Merci pour vos réponses. L'objectif est de pouvoir décharger et charger des classes à chaud. (OSGi).

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par xps1616 Voir le message
    Merci pour vos réponses. L'objectif est de pouvoir décharger et charger des classes à chaud. (OSGi).
    Sans blague. Moi qui pensais que tu utilisais un ClassLoader pour commencer à jouer à Java en niveau hardcore...

    C'est à quoi servent ces classes, qui a un intérêt.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Moi qui pensais que tu utilisais un ClassLoader pour commencer à jouer à Java en niveau hardcore...
    La reflexion pour des classes connues a aussi l'avantage de rendre le code quasi impossible à maintenir et de ne pas avoir d'erreur de compilation quand on change des méthodes

    Plus sérieusement, un tuto pour developper des plugins java (ce que tu sembles vouloir faire) :
    http://vincentlaine.developpez.com/t.../java/plugins/

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 51
    Par défaut Utilisation de classloader d'une une application pour charger des modules
    Bonjour,
    j'ai un soucie dans l'exécution de mon application, j'ai un module qui n'est pas dans le classpath de l'appilication, car je veux utliser un classloader spécifique pour charger le jar du module. je n'arrive pas à importer les class du jar par mon nouveau classloader. et pourtant j'ai fais un teste unitaire pour tester ma class qui crée le classloader et qui instantie les class du module.
    Merci pour votre aide.

Discussions similaires

  1. Questions sur URLClassLoader et Class
    Par Gugelhupf dans le forum Général Java
    Réponses: 15
    Dernier message: 06/10/2013, 21h08
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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