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

Développement Web en Java Discussion :

Setter et Getter dans une Interface


Sujet :

Développement Web en Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut Setter et Getter dans une Interface
    Bonjour les amis !!

    Quelqu'un peut m'aider à comprendre s'il est obligatoire de rajouter des setters et des getters dans une interface pour faire l'injection de dépendance ?

    Je m'explique, supposons qu'une classe implémente une interface. Cette interface ne possède pas de getters et de setters mais la classe quant à elle possède des getters et des setters.

    Pour faire de l'injection de dépendance, Spring utilise l'interface et les setters de la classe. Comment cela est possible si les setters ne sont pas définis dans l'interface ?

    Merci d'avance pour vos questions

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 342
    Points
    342
    Par défaut
    Salut,

    Je ne connais pas très bien Spring, mais j'imagines qu'il fait de la réflexion pour ce genre de choses, du coup peu importes les interfaces ou les classes mères, il cherche une propriété de nom xxx (=> getXxx() et setXxx()) dans l'instance du bean donc dans les méthodes du bean qui sont composées des méthodes de la classe filles + les méthodes de chaque classe mère.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Je pense que cette réponse apporte une valeur ajoutée à ma curiosité. Merci pour cet éclairage. Cependant, est-ce que cela répond à la question que j'ai posée plus haut.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    l'injection se fait par introspection, pas par compilation, donc les interfaces implémentées, c'est pas ses affaire, il a concrètement une instance sur laquel on lui dit, "va mettre à X la propriété y", il va chercher par introspection une méthode setY(), et l'appeler, toujours par introspection. Avec ce genre de truc on peux même appeler des setters / getters qui sont privés!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour vos réponses !

    Pour être plus claire dans ma réponse, supposons que j'ai une interface dont le nom est Linterface puis une classe LaClasse qui implémente cette interface

    Code de l'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public interface Linterface {
     
    	String getQqChose (int entier);
     
    	void setQqChose(String valeur);
     
    }

    Code de la classe :


    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
    public class LaClasse implements Linterface{
    	@Autowired
    	String pourlinjection = null;
    
    	@Override
    	public String getQqChose(int entier) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public void setQqChose(String valeur) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	public String getPourlinjection() {
    		return pourlinjection;
    	}
    
    	public void setPourlinjection(String pourlinjection) {
    		this.pourlinjection = pourlinjection;
    	}
    
    	
    }
    Ma quesstion est de savoir s'il faut définir forcement le setter dans l'interface comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public interface Linterface {
    	
    	String getQqChose (int entier);
    	
    	void setQqChose(String valeur);
    	
    	public void setPourlinjection(String pourlinjection);
    
    }

    Merci d'avance pour vos réponses.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    comem déjà dit, a priori, Spring s'en fout. Et si t'as un doute, suffit de tester, ça prend quelques minutes

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Oui, je suis d'accrod avec toi tchize_, j'ai fait le test et ça marche très bien !!!!
    Mais pour mes tests unitaires avec JUnit et EasyMock, j'utilise les interfaces. Seulement, lorsque je crée un simulacre avec EasyMock par le biais d'une interface, j'ai besoin du setter de la propriété définie dans la classe.
    Le setter est créé dans la classe, à partir de la propriété de la classe qui implémente l'interface que j'utilise pour crée mon simulacre.
    La question : ce setter qui est dans la classe que Spring utilise pour faire son injection, est-il dans l'orthodoxie du "code propre" de définir ce setter dans l'interface ?

    Merci d'avance !!

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    dans l'interface, on met ce qui concerne l'interface, c'est à dire les méthodes que devrait implémenter tout classe utilisant l'interface. A toi donc de voir si cette méthode a du sens pour l'interface.

    Par exemple si un classe Chien implémente une interface AnimalDeCompagnie, et que tu as un setteur dans chien, utilisé par spring setMarqueDePateePourChienPreferee(), information qui serait par exemple utile à une méthode getCoutMensuelNouriture, ca a un sens d'avoir getCoutMensuelNouriture dans l'interface, mais pas d'avoir setMarqueDePateePourChienPreferee.

    Dernière chose, on ne modifie pas une classe/interface pour pouvoir la tester plus facilement, en général. On la modifie uniquement parce qu'il y a un besoin concret du code productif derrière.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup ! ton aide m'a été d'une bonne utilité !!

    résolu.

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

Discussions similaires

  1. Fond JPG dans une interface
    Par TiNoUcHe dans le forum 2D
    Réponses: 3
    Dernier message: 01/03/2006, 10h40
  2. Inclure une fenetre OGL dans une interface java
    Par Bart_lx dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/02/2006, 18h14
  3. Changement de nom dans une interface
    Par memed dans le forum Oracle
    Réponses: 6
    Dernier message: 27/10/2005, 18h20
  4. [vb.net][html] afficher une page html dans une interface vb?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/09/2005, 17h31
  5. Tableau dans une interface idl
    Par Polochon2001 dans le forum CORBA
    Réponses: 2
    Dernier message: 14/05/2004, 09h44

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